繁体   English   中英

具有外键或字符串的数据库设计

[英]Database design when having either foreign key or string

在我的应用程序中,我正在创建一个具有主管的案例,但是由于该主管可以是雇员,也可以是外部主管,所以我希望能够保存内部参考的雇员ID或名称的字符串外部主管的姓名。

我应该如何实施呢? 使用表“ case”以及子表“ case_internal_sv”和“ case_external_sv”是否可行?

如果数据库允许您定义多个主键,则可以将字段employee和字段employee_type组合在一起以形成唯一的主键。 如果不是,则可以为表创建一个自动生成的主键,并为员工类型和字段employee_id提供一个字段。

您正在使用什么数据库?

表格过于规范化弊大于利。 您应该根据自己的需求评估拥有子表的好处/缺点。

一个简单的解决方案是在'case'表中有一个'sv_type'列。 并有两列

  • 'internal_sv_id' ,雇员表的可为空的外键
  • 'external_sv_name' ,可为空的字符串,用于保存外部名称。

然后根据'sv_type'检查这两列之一中'sv_type'

此设计可能不完全符合第三范式,但可以节省大量昂贵的连接并允许员工表保持完整性。

对于我来说,如果有疑问,我会寻求最简单的解决方案。

您的问题中没有太多信息可作为答案的依据。

如果所有类型的主管之间都具有公共数据和功能,那么您可能希望一个表保存该公共数据。 该表将为主管建立主键值,案例表将在该表中包含外键。 内部或外部主管所独有的信息将进入单独的表,并且这些表还将具有返回公共主管级数据的外键。

这种设计是优越的,因为您只有一个地方可以找到所有主管的列表,并且您可以直接在数据库中强制执行主管/案例关系,而无需大量代码或其他约束来确保“唯一填充两列中的一个。

从数据库的角度来看,即使内部和外部主管的数据完全不相交(这不太可能),我也将考虑使用此设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM