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,那么我可以减少 Member
和 Member_Vehicle
之间的连接数 tables.
您对此的看法
- 接受table
或
- 不应该做
非常感谢。谢谢。
你正在考虑的是所谓的非规范化,这在事务处理系统中通常是一个坏主意,除非你有很好的理由去做它被生产性能问题证明,因为例如。
根据经验,您的事务处理系统表应该采用第三范式 (3NF),并且您应该仅在需要时退出。
非规范化的缺点是,如果您的代码中存在错误,您可能会引入数据异常(不一致)。
不用担心加入表。这就是关系数据库管理系统的目的。在非规范化之前,我会考虑其他物理数据库性能技巧,例如构建 覆盖索引.
客户能否在 Member
table 中出现多次?如果不是,则那里的代理键是多余的。事实上,我敢打赌 member_id
也是一个代理键。为什么要生成另一个唯一值来代替已经唯一的值?
因此,如果您从 Member
table 中删除 PK,则将 PK 和 FK 都设为 client_id
并更改 Member_Vehicle
的 member_id
以参考到 'client_id',你的问题就解决了。
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,那么我可以减少 Member
和 Member_Vehicle
之间的连接数 tables.
您对此的看法
- 接受table
或 - 不应该做
非常感谢。谢谢。
你正在考虑的是所谓的非规范化,这在事务处理系统中通常是一个坏主意,除非你有很好的理由去做它被生产性能问题证明,因为例如。
根据经验,您的事务处理系统表应该采用第三范式 (3NF),并且您应该仅在需要时退出。
非规范化的缺点是,如果您的代码中存在错误,您可能会引入数据异常(不一致)。
不用担心加入表。这就是关系数据库管理系统的目的。在非规范化之前,我会考虑其他物理数据库性能技巧,例如构建 覆盖索引.
客户能否在 Member
table 中出现多次?如果不是,则那里的代理键是多余的。事实上,我敢打赌 member_id
也是一个代理键。为什么要生成另一个唯一值来代替已经唯一的值?
因此,如果您从 Member
table 中删除 PK,则将 PK 和 FK 都设为 client_id
并更改 Member_Vehicle
的 member_id
以参考到 'client_id',你的问题就解决了。