php - 不使用 sql 外键的缺点

标签 php mysql sql database magento

我有一个 Magento 商店(使用 MySql 数据库),刚刚注意到一些开发人员引入了一个自定义数据库来捕获一些结构化数据。

现在我注意到表之间并没有通过外键链接,只是添加了一列,例如priceListID = 01124 与价目表中的 Id 相同。因此,我假设通过触发不同的选择语句,必须在代码中将数据链接在一起。

现在我想知道是否需要尽快解决这个问题,或者不在数据库级别使用外键将数据链接在一起是否真的可以? 这样做的缺点是什么?可能有一些好处(比如灵 active ?)

希望你能帮我解决这个问题!非常感谢!

最佳答案

将此类约束保留在数据库中几乎没有什么好处:

  1. 表现。如果将大多数约束(例如外键)存储在数据库中,靠近数据,则可以更好地实现。您想使用额外的 select 检查数据完整性吗?您必须向数据库发出额外请求。这需要一些时间。
  2. 如果您有多个应用程序与您的数据库配合使用怎么办?您必须编写代码来检查所有这些数据的完整性,这意味着额外的费用。
  3. 同步。当您使用附加选择检查数据完整性时,其他一些用户可能会同时删除此数据。你不会知道的。当然,这些检查是可以适当实现的,但这仍然是你必须要做的额外工作。

对我来说,这是一种糟糕的、不可扩展的设计,会带来很多问题。数据完整性是构建数据库的目的。这些类型的验证应该保存在数据库中。

关于php - 不使用 sql 外键的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55542746/

相关文章:

php - 在 Mac 10.6 上使用 Mamp 或其他包与手动启用 PHP 并安装 MySQL

PHP将数组值插入mysql

mysql - 分组前对数据进行排序

Mysql 找到共享帖子的根父级

数据库 |根据条件将列查看为多列

sql - 对 SQL Server 表进行重复数据删除

php - 在 PHP 中使用 FFMpeg av_read_frame?

php - Github API ...在移动/重命名文件上获取源文件名

mysql - 如何改进这个一对多 ActiveRecord 数据模型?

sql - 用于查找与一组属性匹配的行的 SQL 查询