有多少外键太多了?

Ton*_*ony 15 sql database database-design foreign-keys

浏览本文后:http: //diovo.com/2008/08/are-foreign-keys-really-necessary-in-a-database-design/

在设计数据库时使用外键似乎是个好主意.但是你什么时候用得太多了?

例如,假设我有一个主表用于存储其他程序通过以下列引用的机器部件信息列表:

  1. ID
  2. 名称
  3. 颜色
  4. 价钱
  5. 测量单位
  6. 类别
  7. 等等...

我是否应该制作包含所有可能颜色,单位和类别列表的表格,然后将这些表格设置为机器零件信息表中相应列的外键?在什么时候使用外键的好处会影响我正在制作所有这些额外的表和关系的事实?

Lar*_*tig 20

您希望能够确定地指出数据库中只存在已知的有效值的任何属性都应使用外键进行保护.否则,您只能希望在应用程序代码中捕获无效值以及将来创建的任何接口.

拥有更多的表和关系并不是一件坏事.唯一的问题 - 通常不是一个问题 - 与维护用于强制执行这些关系的索引的开销有关.在遇到性能问题之前,您应该为每个"应该"拥有一列的列创建外键关系(因为需要根据列表验证值).

在我愿意牺牲性能的正确性之前,性能考虑必须非常可怕.

  • 请注意,FK显然是有用的,应该使用,但它们不是您在数据验证方面的唯一选择.检查约束肯定是有效的,应该在值谨慎时使用,不要根据业务逻辑进行更改,也不要使用与之相关的其他信息. (2认同)