0

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

4

2 回答 2

3

根据您的描述,我认为没有理由将其“正常化”。我什至会说这与标准化无关。

我个人对规范化的简单规则是:在更改单个事实时,我是否必须做更多的插入/更新/删除操作。

或者是否有我无法代表的事实组合。

或者有没有我可以用两种不同的方式来表示的事实?

我在这里看不到。

所以我对2的回答是:没什么,因为没有问题。

不过,可能存在一些隐藏的非规范化。但不是你描述的那样。

于 2012-04-23T19:19:38.600 回答
0

1)规范化方案设计更简洁,更易于维护。

2)有时非规范化布局在有效性方面更好。比如说,如果对小表有很多查询,而对大表user_cat几乎没有查询,user_admin_cat并且没有人需要 UNION - 它可能是有效的。

于 2012-04-23T19:10:55.123 回答