假设您有一个员工表和一个职位列表表。每个员工必须在表中有一份工作。通常我会给每个作业一个id并将其作为employee表中的外键引用。然而,我的一个同事建议我们使用作业列表表作为字典,并且在插入/更新之前,我们检查表中是否存在“作业类型”,然后将作业类型作为字符串插入到employee表中。 / p>
据我所知
优点:
选择更快(尽管主键上的连接应该是边缘的 差)
缺点:
按工作类型选择员工的速度较慢
改变工作更加困难 型
上述哪种方法最好?
答案 0 :(得分:6)
我不确定我理解为什么会发生冲突。您知道主键和外键都可以像数字类型一样轻松地成为字符串类型吗?通过将作业类型字段作为作业类型表中的主键和employee表中的外键,可以获得两个系统的优点。
此方法的优点是您不需要将作业类型表连接回employee表以获取作业类型的描述性名称,而您仍然使用数据库来提供重要的参照完整性到您的数据库设计。
缺点是,如果您拥有大量员工,您将使用更多的存储资源,如果您更改了工作描述,则需要通过员工表级联更改。
虽然通常使用整数作为主键(并且某些框架需要它),但没有规则说它必须是那样。
答案 1 :(得分:1)
如果它会使管理工作类型变得更加困难(我假设这是你或其他人会做的事情),那么对于小的性能提升真的值得吗?这听起来似乎可能因为小额奖励而过于复杂化。我说最好的做法是为了简单起见坚持使用外键。