数据库:大量的外键

标签 database database-design foreign-keys primary-key foreign-key-relationship

我有一个关于 gps 系统的 mysql 数据库。它有大约 70 张 table 。

其中一个表称为 vehicles,它只有一个包含车辆 ID 的列,并且它是一个主键。

其余表包含一个名为 vehicleId 的列,它们都是外键。

我开始担心有这么多外键只指向一个表是否正常。

实际上这是我的问题:70 个外键只指向一个主键是否正确?

附言有些关系是一对一的,有些是一对多的。

最佳答案

首先,我假设您正在使用某种关系数据库管理系统,可能是 SQL 系统。

如果“现实世界”中的关系是正确的,即 70 个表中的每一行都确实包含与一辆车的信息相关的数据,那么这样做本身并没有错,尽管人们通常会期望在“车辆”表中查找多个主键值。

来自纯粹的数据库 Normalization从角度来看,有人可能会争辩说,在涉及一对一表映射的情况下,每个表的列都可以移至“车辆”表。但是,如果您在其他一对一表格中有大量列(假设任何人有兴趣直接查看表格......它可能无论如何,所有这些都被您的应用程序的前端抽象掉了,或者您可以使用简单的查询有选择地检查具有大量列的单个表。

话又说回来,有时出于性能原因有选择地选择 Denormalize数据库的一部分。

这完全取决于您要实现的目标。对规范化和非规范化有很好的理论理解可能是一个很好的起点。

我通常采用的方法是,对于 RDBMS,我默认进行规范化,除非有充分的理由不这样做。在我将非规范化视为提高性能的选项之前,我会寻求正确的索引和结构化查询。

我认为,在您的情况下,根据提供的信息,我想将列从一对一表移到“车辆”表上。

关于数据库:大量的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312325/

相关文章:

oracle - 为什么要使用除VARCHAR2(4000)之外的其他任何方式将字符串存储在Oracle数据库中?

mysql - 如何在 mysql 中使用删除级联?

mysql - MariaDB 和 MySQL 之间有什么关系?

sql - 哪种数据类型应该用于货币?

algorithm - 数据库设计 : Creating database and User Interface for recurring events

entity-framework - EF 4.1 Code First - 自引用外键和其他表的外键

c# - EntityFramework : 1:0. .1 关系反序列化为集合

c# - 如何根据互联网连接将数据保存在不同的数据库中

java - 降低服务器端报告占用过多内存风险的最佳方法

database - Oracle 对某些表的更新无限期挂起