【发布时间】:2012-09-23 16:07:10
【问题描述】:
看完这篇文章后: http://diovo.com/2008/08/are-foreign-keys-really-necessary-in-a-database-design/
在设计数据库时使用外键似乎是个好主意。但是你什么时候用的太多了?
例如,假设我有一个主表,用于存储其他程序通过以下列引用的机械零件信息列表:
- 身份证
- 姓名
- 颜色
- 价格
- 测量单位
- 类别
- 等等……
我是否应该制作包含所有可能颜色、单位和类别列表的表格,然后将它们设置为机器零件信息表中相应列的外键?在什么时候使用外键的好处会超过我创建所有这些额外的表和关系这一事实?
【问题讨论】:
-
取决于....可能是颜色,请记住人们可能会拼错,您可能想轻松搜索。可能不是单位,因为您可以只使用 int。大多数时候,任何适合“类别”的东西都可以放在另一个表中并做一个 FK 参考。这取决于。关系数据库设计和平面表/文件设计都有优点和缺点......它也可能取决于您使用的数据库,或者它周围的代码......只是做看起来很有意义的事情运行。
-
关系的一个好处是不会一遍又一遍地存储相同的数据...考虑不同数据类型的大小。对 varchar(max) 的数字引用将节省空间。但是,如果您正在使用 access 或者您的周围代码可以为您处理固定列表 - 也许颜色不是您想要单独表格的东西。
-
我认为让你进入“太多”核心的一个大问题是,你是否在这张表中做了很多插入?如果是,那么所有这些外键都需要根据它们的表进行检查,以确保它们是有效的。这不是免费的操作。不过,我猜像零件目录这样的东西不会有很多插入,而且它不会严重影响数据库的性能。
-
因此,如果我有另一个表只保存说......正在进行的项目和条目的记录不断被添加/删除,那么拥有外键是个坏主意吗?例如,用于级联删除的一些外键可以吗?
-
也许更深入地了解数据库规范化,尤其是第 3 范式会对您有所帮助 - 只需 Google 3NF。
标签: sql database database-design foreign-keys