【发布时间】:2012-07-02 20:39:09
【问题描述】:
我正在为 Timesheet 应用程序设计一个 oracle 数据库。我想知道是否真的有必要对表(Master 和 Child)进行外键约束。
我们知道理论上对表有适当的参照完整性是件好事,但我们真的需要它们吗?
我听说外键使数据库在每个 DML 操作上都额外工作,因为它必须检查 FK 一致性。这会降低性能。但另一方面,在子表中插入新行之前已删除主键的情况下,它可能会有所帮助。
性能是时间表应用程序中的一个主要问题,月底将有大约 250 人填写他们的时间表(可能同时)。
如果我对表没有外键约束,那么每次在子表中插入新记录之前,我是否必须先检查它(在存储过程中)是否主表中存在主键?
补充:过去,我曾与许多经验丰富的 oracle 数据库开发人员合作,我们从未在表上使用过外键约束。
【问题讨论】:
-
250 个用户并不多。尤其是如果每周只有一次 - 您不应该担心外键约束检查对性能造成的任何影响。
-
您未在数据库中签入的所有内容最终都将包含无效数据。因此,除非您想在几年内拥有大量数据垃圾,否则请实施您的约束。
-
您从未与经验丰富的 Oracle 开发人员合作。您一直在与不了解一般数据库(尤其是 Oracle)工作原理的牛仔一起工作。
标签: c# asp.net sql database oracle