Sql server SQL表设计-父表和子表中的FK相同
Sql server SQL表设计-父表和子表中的FK相同,sql-server,database-design,foreign-keys,database-performance,sqlperformance,Sql Server,Database Design,Foreign Keys,Database Performance,Sqlperformance,成员表中的列: id (PK)* client_id (FK) location_id (FK) address etc. id (PK)* member_id (FK) mileage etc. Member\u Vehicle表中的列: id (PK)* client_id (FK) location_id (FK) address etc. id (PK)* member_id
成员
表中的列:
id (PK)*
client_id (FK)
location_id (FK)
address
etc.
id (PK)*
member_id (FK)
mileage
etc.
Member\u Vehicle
表中的列:
id (PK)*
client_id (FK)
location_id (FK)
address
etc.
id (PK)*
member_id (FK)
mileage
etc.
将成员
表中已经存在的FKs复制到成员车辆
表中是否是一种良好的设计?
因此,
New\u Member\u Vehicle
表将
id (PK)*
member_id (FK)
client_id (FK)
location_id (FK)
mileage
etc.
我们应用程序中的大部分处理都是围绕成员车辆
表进行的。
我的想法是-如果
Member\u-Vehicle
表随时具有我需要的ID,那么我可以减少Member
和Member\u-Vehicle
表之间的连接数
你对为什么会这样的想法
或
非常感谢。多谢各位
您正在考虑的被称为“非规范化”,在事务处理系统中通常是一个坏主意,除非您有很好的理由这样做,例如,生产性能问题证明了这一点 根据经验,您的事务处理系统表应该是第三范式(3NF),并且只有在需要时才应该退出 反规范化的缺点是,如果代码中存在错误,可能会引入数据异常(不一致)
不要担心加入表格。这就是关系数据库管理系统的目的。在去规范化之前,我会考虑其他物理数据库的性能技巧,比如建立覆盖索引。 < P>你所考虑的被称为“强”-非正规化< /强>,在事务处理系统中通常是个坏主意,除非你有很好的理由去证明它是由生产性能问题来解决的。比如说 根据经验,您的事务处理系统表应该是第三范式(3NF),并且只有在需要时才应该退出 反规范化的缺点是,如果代码中存在错误,可能会引入数据异常(不一致)
不要担心加入表格。这就是关系数据库管理系统的目的。在去规范化之前,我会考虑其他物理数据库的性能技巧,比如建立覆盖索引。< /P> < P>客户端是否可以在<代码>成员< /代码>表中出现不止一次?如果没有,那么代理键是多余的。事实上,我敢打赌
member\u id
也是一个代理密钥。为什么要生成另一个唯一值来替代已经唯一的值
因此,如果您从
Member
表中删除PK,则将client\u id
同时设置PK和FK,并将Member\u Vehicle
的Member\u id
更改为“client\u id”,您的问题就解决了。客户能否在Member
表中出现多次?如果没有,那么代理键是多余的。事实上,我敢打赌member\u id
也是一个代理密钥。为什么要生成另一个唯一值来替代已经唯一的值
因此,如果您从Member
表中删除PK,则同时生成client\u id
PK和FK,并将Member\u Vehicle
的Member\u id
更改为“client\u id”,您的问题就解决了