在我的应用程序中,我正在创建一个具有主管的案例,但由于主管可以是员工或外部主管,我希望能够保存内部引用的员工ID或字符串作为外部监督员姓名的名称。
我该如何实现?有一个表“case”和子表“case_internal_sv”和“case_external_sv”的方式去吗?
答案 0 :(得分:0)
如果您的数据库允许您定义多个主键,则可以将字段employee和字段employee_type组合以形成唯一主键。如果没有,您可以为表创建一个自动生成的主键,并为employee_id提供一个字段,为employee_id设置一个字段。
您使用的数据库是什么?
答案 1 :(得分:0)
让表格过于规范化可能会带来更大的伤害而不是帮助。您应该根据您的要求评估子表的优缺点。
一个简单的解决方案是在'sv_type'
表中添加'case'
列。并有两列
'internal_sv_id'
,员工表的可以为空的外键'external_sv_name'
,一个可以保存外部名称的可空字符串。然后根据'sv_type'
此设计可能不完全符合第三范式,但它可以节省大量昂贵的连接,并允许员工表的完整性。
至于我,如果有疑问,我会选择最简单的解决方案。
答案 2 :(得分:0)
您的问题中没有很多信息可以作为答案的基础。
如果所有类型的主管都有共同的数据和功能,那么您可能希望有一个表来保存该公共数据。该表将为主管建立主键值,案例表将在该表中具有外键。内部或外部主管独有的信息将进入单独的表,这些表还将具有返回公共管理员级别数据的外键。
这种设计是优越的,因为您只有一个地方可以找到所有主管的列表,因为您可以直接在数据库中强制执行主管/案例关系,而无需大量代码或其他限制来确保“填充了两列中的一个且只有一个。
从数据库的角度来看,即使内部和外部主管的数据完全不相交(这是不可能的),我也会考虑使用这种设计。