如果数据库有包含相同 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) 如果你因为只有两个表有重复而不使用规范化解决方案,那么在你做某事之前应该有多少个重复的表?你会实施什么解决方案?为什么这是一个好的解决方案?