如果数据库中的表包含相同的 FK,是否应该对它们进行规范化?
这些是有问题的数据库表:
user (
user_id int PK,
...
...
)
user_cat (
user_cat_id int PK,
user_id int FK,
effective_date date,
location_id FK, <-- dup
qualification_id FK, <-- dup
business_id FK <-- dup
)
user_admin_cat (
admin_cat_id int PK,
user_id int FK,
effective_date date,
company_id FK,
location_id FK, <-- dup
qualification_id FK, <-- dup
business_id FK <-- dup
)
以下是我考虑过的尽量减少重复的做法:
user (
user_id int PK,
...
...
)
user_cat (
user_cat_id int PK,
user_id int FK,
effective_date date,
shared_id, FK <-- dup
)
user_admin_cat (
admin_cat_id int PK,
user_id int FK,
effective_date date,
company_id FK,
shared_id, FK <-- dup
)
shared_user_cat_fks (
shared_id int PK,
location_id FK,
qualification_id FK,
business_id FK
)
我想了解的是以下一个或多个问题的答案:
(1) 如果使用归一化解决方案,为什么会更好?
(2) 如果你不使用归一化解决方案,你会怎么做?为什么这个解决方案更好?
(3) 如果因为只有两个表有重复而不使用规范化解决方案,那么在你做某事之前应该有多少个重复表?你会实现什么解决方案?为什么这是一个好的解决方案?
最佳答案
根据您的描述,我看不出有什么理由对其进行“规范化”。我什至会说这与规范化无关。
我个人的规范化简单规则是:我是否必须在更改单个事实时做更多的插入/更新/删除操作。
或者是否存在我无法代表的事实组合。
或者是否有我可以用两种不同方式表示的事实?
我在这里没有看到。
所以我对2的回答是:没什么,因为没有问题。
虽然可能存在一些隐藏的反规范化。但它不是你所描述的。
关于mysql - 我是否应该进一步规范化多个表中使用的外键集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10286584/