我有一个 Magento 商店(使用 MySql 数据库),刚刚注意到一些开发人员引入了一个自定义数据库来捕获一些结构化数据。
现在我注意到表之间并没有通过外键链接,只是添加了一列,例如priceListID = 01124
与价目表中的 Id
相同。因此,我假设通过触发不同的选择语句,必须在代码中将数据链接在一起。
现在我想知道是否需要尽快解决这个问题,或者不在数据库级别使用外键将数据链接在一起是否真的可以? 这样做的缺点是什么?可能有一些好处(比如灵 active ?)
希望你能帮我解决这个问题!非常感谢!
最佳答案
将此类约束保留在数据库中几乎没有什么好处:
- 表现。如果将大多数约束(例如外键)存储在数据库中,靠近数据,则可以更好地实现。您想使用额外的
select
检查数据完整性吗?您必须向数据库发出额外请求。这需要一些时间。 - 如果您有多个应用程序与您的数据库配合使用怎么办?您必须编写代码来检查所有这些数据的完整性,这意味着额外的费用。
- 同步。当您使用附加选择检查数据完整性时,其他一些用户可能会同时删除此数据。你不会知道的。当然,这些检查是可以适当实现的,但这仍然是你必须要做的额外工作。
对我来说,这是一种糟糕的、不可扩展的设计,会带来很多问题。数据完整性是构建数据库的目的。这些类型的验证应该保存在数据库中。
关于php - 不使用 sql 外键的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55542746/