|
|
1
6
问题的一部分可能是原始的模式设计:外键指向错误的方向,将地址、电话号码等视为主要内容而不是细节。当您希望同时更新给定地址的所有用途时,这可能很方便,但根据我的经验,它总是会演变为太多困难的例外情况,例如某个位置的一个人移动,因此您需要断开他们与整个家庭或办公室移动的链接,以便更新现有记录。如果您试图在CRUD屏幕上对用户隐藏此详细信息,那么最终会出现这样一种情况,即它无法满足您的需要。 如果这样做只是为了折叠重复的值,那么实际上是数据库的非规范化:仅仅存在地址行是没有意义的。唯一的区别是,与大多数非规范化不同,它试图获得空间效率而不是速度。在这一点上创建链接表只会使问题更加复杂。 例如,如果您希望每个联系人有多个地址,请将地址设置为一个带有外键的详细信息表,外键指向父联系人,并且不必担心重复的地址值,因为 它们只是价值观 . 否则,将Address设置为真实实体:添加标题或描述字段和CRUD屏幕,使其能够作为实体独立存在。 |
|
|
2
3
|
|
|
3
0
我认为您正在模糊删除和更新案例。 如果您有客户机a和客户机b,并且两者都使用相同的地址,这将通过关系表中的记录反映出来(比如说客户机地址,尽管如果您存储多个实体的地址,我相信它会比这更复杂)
|
|
|
developer · 带外键的SQL表设计 1 年前 |
|
|
relatively_random · 确保两个表之间一致的共同参考 1 年前 |
|
|
b126 · 在两种不同的Oracle模式上执行相同查询的速度差异很大 2 年前 |
|
|
robertspierre · 在多对多关系中自动删除未引用的行 2 年前 |
|
|
Michael Samuel · MYSQL在以下情况下自动创建索引 8 年前 |