我有一个关于 gps 系统的 mysql 数据库。它有大约 70 张 table 。
其中一个表称为 vehicles,它只有一个包含车辆 ID 的列,并且它是一个主键。
其余表包含一个名为 vehicleId 的列,它们都是外键。
我开始担心有这么多外键只指向一个表是否正常。
实际上这是我的问题:70 个外键只指向一个主键是否正确?
附言有些关系是一对一的,有些是一对多的。
最佳答案
首先,我假设您正在使用某种关系数据库管理系统,可能是 SQL 系统。
如果“现实世界”中的关系是正确的,即 70 个表中的每一行都确实包含与一辆车的信息相关的数据,那么这样做本身并没有错,尽管人们通常会期望在“车辆”表中查找多个主键值。
来自纯粹的数据库 Normalization从角度来看,有人可能会争辩说,在涉及一对一表映射的情况下,每个表的列都可以移至“车辆”表。但是,如果您在其他一对一表格中有大量列(假设任何人有兴趣直接查看表格......它可能无论如何,所有这些都被您的应用程序的前端抽象掉了,或者您可以使用简单的查询有选择地检查具有大量列的单个表。
话又说回来,有时出于性能原因有选择地选择 Denormalize数据库的一部分。
这完全取决于您要实现的目标。对规范化和非规范化有很好的理论理解可能是一个很好的起点。
我通常采用的方法是,对于 RDBMS,我默认进行规范化,除非有充分的理由不这样做。在我将非规范化视为提高性能的选项之前,我会寻求正确的索引和结构化查询。
我认为,在您的情况下,根据提供的信息,我想将列从一对一表移到“车辆”表上。
关于数据库:大量的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312325/