SQL Table 设计 - 父表和子表中的 FK 相同

SQL Table Design - Same FKs in Parent and Child tables

Member中的列table:

id           (PK)*
client_id    (FK)
location_id  (FK)
address
etc.

Member_Vehicle中的列table:

id           (PK)*
member_id    (FK)
mileage
etc.

Member table 中的 FK 复制到 Member_Vehicle table 中是否是好的设计?
所以 New_Member_Vehicle table 将是

id           (PK)*
member_id    (FK)
client_id    (FK)
location_id  (FK)
mileage
etc.

我们应用程序中的大部分处理都是围绕 Member_Vehicle table 进行的。
我的想法是 - 如果 Member_Vehicle table 很容易有我需要的 ID,那么我可以减少 MemberMember_Vehicle 之间的连接数 tables.

您对此的看法

  1. 接受table
  2. 不应该做

    非常感谢。谢谢。

你正在考虑的是所谓的非规范化,这在事务处理系统中通常是一个坏主意,除非你有很好的理由去做它被生产性能问题证明,因为例如。

根据经验,您的事务处理系统表应该采用第三范式 (3NF),并且您应该仅在需要时退出。

非规范化的缺点是,如果您的代码中存在错误,您可能会引入数据异常(不一致)。

不用担心加入表。这就是关系数据库管理系统的目的。在非规范化之前,我会考虑其他物理数据库性能技巧,例如构建 覆盖索引.

客户能否在 Member table 中出现多次?如果不是,则那里的代理键是多余的。事实上,我敢打赌 member_id 也是一个代理键。为什么要生成另一个唯一值来代替已经唯一的值?

因此,如果您从 Member table 中删除 PK,则将 PK 和 FK 都设为 client_id 并更改 Member_Vehiclemember_id 以参考到 'client_id',你的问题就解决了。