2012-04-23 2 views
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) Если вы не будете использовать нормализационное решение, потому что есть дубликаты только в двух таблицах, сколько таблиц дубликатов должно быть до того, как вы что-нибудь сделаете? Какое решение вы бы выполнили? Почему это хорошее решение?

ответ

0

1) Нормализованная схема имеет более чистый дизайн и удобна в обслуживании.

2) Иногда ненормированные макеты лучше с точки зрения эффективности. Скажем, если есть много запросов к маленькому столу user_cat и почти нет запросов к огромному user_admin_cat, и никому не нужен UNION - он может быть эффективным.

+0

Благодарим вас за ответ Дмитрий. –

3

Из того, что вы описали, я не вижу причины «нормализовать» его. Я бы даже сказал, что это не имеет никакого отношения к нормализации.

Мое личное простое правило для нормализации: мне нужно сделать больше одного вставки/обновления/удаления при изменении одного факта.

Или есть сочетание фактов, которые я не могу представлять.

Или есть факты, которые я могу представить двумя разными способами?

Я не вижу этого здесь.

Так что мой ответ на 2: Ничего, потому что нет проблем.

Однако может быть скрытая денормализация. Но это не то, что вы описываете.

Смежные вопросы