データベースに同じ FK を含むテーブルがある場合、それらを正規化する必要がありますか?
問題の db テーブルは次のとおりです。
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 つ以上に対する答えです。
(1) 正規化ソリューションを使用する場合、なぜそれが優れているのですか?
(2) 正規化ソリューションを使用しないとしたら、どうしますか? このソリューションが優れているのはなぜですか?
(3) 重複が 2 つのテーブルにしかないため、正規化ソリューションを使用しない場合、何かを行う前に重複のテーブルがいくつある必要がありますか? どのようなソリューションを実装しますか? なぜこれが良い解決策なのですか?