我有两张桌子:公司和员工。
我还有一个relation表employees,其中包含外键company_id,employee_id作为复合主键。注:员工可以在多家公司工作。
我希望有另一个employee schedules表,它只包含在公司工作的员工的计划(company_id:integer,employee_id:integer,start_time:datetime,end_time:datetime)。这将最终显示在某种日历小部件中。
但是,使用这种设计,我必须在应用程序级别验证员工在添加计划之前实际上在公司工作。
我想知道是否有更好的方法在数据库级别表示这一点,或者只在应用程序级别进行验证?例如,如果有方法将employeeschedules pkey(company_id,employee_id)与employees pkey(company_id,employee_id)链接起来。欢迎任何其他设计建议!

最佳答案

我将重新定义模式,并添加另一个表:

Person(id, name)
Company(id);
Employee(id, companyId, personId);
Schedules(id, employeeId, startTime, endTime);

这意味着一个员工记录只能绑定到一个公司。但是,一个人可以有多个员工记录。所有“id”列都是唯一的,并且是表的主键。companyid是指company表的主键等等。

10-08 19:41