我应该使用外表中的外键还是字符串值?

Mar*_*ark 4 sql database database-design

假设您有一个员工表和一个工作列表表.每个员工必须在表中有一份工作.通常我会给每个作业一个id并将其作为employee表中的外键引用.然而,我的一个同事建议我们使用作业列表表作为字典,并且在插入/更新之前,我们检查表中是否存在"作业类型",然后将作业类型作为字符串插入到employee表中.

据我所知

优点:

选择更快(尽管主键上的连接应该有差别)

缺点:

按工作类型选择员工的速度较慢
更难以更改工作类型

以上哪种方法最好?

Lar*_*tig 6

我不确定我理解为什么会有冲突.您是否知道主键和外键都可以像数字类型一样轻松地成为字符串类型?通过将作业类型字段作为作业类型表中的主键和employee表中的外键,可以获得两个系统的优点.

此方法的优点是您不需要将作业类型表连接回employee表以获取作业类型的描述性名称,同时仍使用数据库提供对数据库很重要的参照完整性设计.

缺点是,如果您拥有大量员工,您将使用更多的存储资源,如果您更改了工作描述,则需要通过employee表级联更改.

虽然通常使用整数作为主键(并且某些框架需要它),但是没有规则说它必须是那样.