我正在为Timesheet应用程序设计一个Oracle数据库。我想知道是否真的有必要对表(主和子)有外键约束。为什么我应该创建外键约束?
正如我们所知道的那样,从理论上讲,在表格上有适当的参照完整性是很好的,但是我们真的需要它们吗?
我听说外键使得数据库在每个DML操作上额外工作,因为它必须检查FK一致性。这可能会降低性能。但另一方面,在将子行插入子表之前,主键已被删除的情况下可能会有所帮助。
性能是时间表应用程序中的一个主要问题,在本月底将有大约250人填充他们的时间表(可能在同一时间)。
如果我没有在表上的外键约束,那么我必须首先检查它(在存储过程中)如果每次在子表中插入一个新记录之前主键存在主键?
加入:在过去,我曾与许多经验的oracle数据库开发人员合作,我们从未在表上使用外键约束。
250的用户还不是很多。特别是如果它每周只有一次 - 你不应该关心从foriegn关键约束检查中感知到的性能。 – slugster
http://stackoverflow.com/questions/2317391/is-there-a-severe-performance-hit-for-using-foreign-keys-in-sql-server – Habib
一切,你不要在你的数据库检查会最终包含无效数据。所以除非你想在几年内有大量的数据垃圾,否则实施你的限制。 – Rene