我的团队领导对 MySQL 数据库中的 FK 的看法正确吗?

问题描述 投票:0回答:1

TLDR:
将表中与另一个表相关的行声明为外键是mysql中的良好实践吗?
长话短说:
今天在一次关于 mysql 数据库设计的项目会议上,当我演示测试模型时,团队负责人问:“您是否将关系声明为外键?”起初我很困惑,然后坚定地回答“是的!”我认为他是在测试我的知识,因为我对团队来说是个新手,而且还是个初级学生。令我惊讶的是,他回答说“哦,好吧,无论如何都可以”,好像不这样做会更好。另一位团队成员和我一样困惑。他补充了一些“这会导致无尽的级联”的内容,但我无法进一步深入,因为每天的会议时间很短,话题就被放弃了。
后来他私下给我写信,他明显觉得有必要澄清一下。 “不是说声明外键是错误的,而是在大型数据库中会出现问题。由于这不是一个大型数据库,所以不会有问题。”所以我问“如果你不将其声明为外键那怎么办?你只需将其保留为 int 并‘手动’关联它们?”他基本上回答“是”。
我不知道这是如何真正在闭门后运作的,而不是他们是如何被教导的,还是他错了?是否有任何理由不为作为外键的行声明外键?不受控制的级联的答案不是更多地了解数据库的工作原理和更好的设计吗?
背景:
我开始认为我的团队领导并不像他所表现的那么资深,并且想知道这是否是添加到此案的又一条线索。

我按照教导尝试了数据库,并期望它是正确的。

sql mysql foreign-keys relational-database relationship
1个回答
0
投票

外键非常适合维护数据完整性,确保数据库保持一致和干净。但它们并不总是完美的。它们可能会减慢大型数据库中的速度,因为每次更改某些内容时,系统都必须确保它对于这些外键而言仍然有意义。如果您不小心设置它们,您可能会意外删除或更改您无意的内容(这就是您的团队领导所说的“级联”)。

您的团队领导说您可以手动处理关系,尤其是在较大的数据库中以提高性能,这不一定是错误的。但是,手动执行也有其自身的问题 - 很容易出错并最终得到不一致的数据。

所以,这并不是外键普遍好坏的情况。这取决于您的具体情况。对于较小的数据库,或者当数据完整性至关重要时,请使用外键。如果您正在使用一个巨大的数据库并且您更关心速度,并且您有信心可以在应用程序代码中准确处理这些关系,那么也许您可以不用外键。

© www.soinside.com 2019 - 2024. All rights reserved.