(De) Нормализация двух отношений - PullRequest
9 голосов
/ 30 ноября 2010

Люди, которые читают «Введение в систему баз данных» К.Дейта или книги подобного уровня, не должны иметь проблем с определением нормализации и денормализации.

Однако память уже не та, что была раньше, и я часто смотрю на какой-то дизайн и говорю, что он не нормализован, хотя я не могу найти, какую из нормальных форм он нарушает.

Фактический пример, который иллюстрирует это:

Если у нас есть отношения

r1 (A, B, C) и r2 (A, D)

с FD: AB-> C и A-> D

и r1 представляют подробные данные, в то время как r2 является сводкой этих данных (другими словами, каждый экземпляр D является функцией значений в r1. В этом примере пусть это будет промежуточный итог значений C согласно A из r1).

Пример экземпляра

r1 = 
A  B  C  
1  1  10
1  2  20
2  1  10
2  2  25

r2 =
A  D
1  30
2  35

Итак, хотя я не могу сказать, что он ломается, например, 2NF или 3NF, мне кажется, что я застрял на мысли, что дизайн все еще денормализован в следующем смысле (из Codd, EF "Дальнейшая нормализация базы данных" Реляционная модель », стр. 34, комментируя причины нормализации за пределы 1НФ):

  1. Чтобы освободить коллекцию отношений от нежелательной вставки, обновление и удаление зависимостей;
  2. Для уменьшения необходимости реструктуризации сбора отношения как новые типы данных введены, и таким образом увеличить жизнь диапазон прикладных программ;
  3. сделать реляционную модель более информативной для пользователей;
  4. сделать коллекцию отношений нейтральной к запросу статистика, где эта статистика может меняться со временем.

Как я могу сказать, что если мы определим D как сумму всех Cs из r1, где A из r1 равно A из r2, то, если мы обновим C в r1 и не обновим D в r2, мы может закончиться нежелательной зависимостью обновления, и данные окажутся в несовместимом состоянии. Я считаю эту причину называть r1 и r2 денормализованными и думать о них как о денормализованных. (На самом деле все r2 является функцией r1 и вносит в модель ноль новых фактов; r2 = f (r1))

Так что вопросы

  1. можно ли назвать r1 и r2 денормализованными?
  2. если да, то почему? если нет, то почему? (по какому правилу? или по какому определению?)

Примечание:
Тем, кто находит вопрос (-ы) достаточно интересным, чтобы вставить ответ, я прошу предоставить либо что-то цитируемое, либо представить его в форме конкретных предположений и выводов (или, другими словами, если вы собираетесь поставить Ваше мнение, пожалуйста, следуйте ему с некоторыми рассуждениями).

EDIT Я принял ответ dportas. Я постараюсь добавить сюда немного: C.J.Дата может сделать четкое и строгое различие:

Большая часть теории дизайна связана с сокращение избыточности; нормализация уменьшает избыточность в пределах relvars, ортогональность уменьшает его по всей relvars.

цитата из Подробная база данных: теория отношений для практиков

и на следующей странице

просто как неспособность нормализовать все путь подразумевает избыточность и может привести к некоторые аномалии, то же самое может несоблюдение ортогональности.

Ответы [ 4 ]

4 голосов
/ 25 января 2012

Ваше определение для столбца D в r2, «сумма всех Cs из r1, где A из r1 равна A из r2», является ограничением на D. Более формально, где Σ - суммирование, π - проекция, а σ это выбор,

(a,d) ∈ r2 ⇔ (a, d) = (a, Σ c), a ∈ π<sub>A</sub>(r1), c ∈ π<sub>C</sub>(σ<sub>A=a</sub>(r1))

Поскольку это ограничение не является ни ограничением домена, ни ограничением ключа, r2 не находится в Нормальной форме "Домен / ключ" (DKNF).

DKNF - единственная нормальная форма, о которой я знаю, что она не определена в терминах одного отношения, главным образом потому, что она определяется в терминах ограничений, а не зависимостей.

4 голосов
/ 30 ноября 2010

Если предположить, что AB является ключом в r1, а A является ключом в r2, то кажется, что схема в 6NF.Словарь реляционных баз данных (Дата) определяет денормализацию как:

Замена набора relvars R1, R2,.,., Rn их объединением R, так что для всех i проекция R на атрибуты Ri гарантированно равна Ri (i = 1, 2, ..., n).

По сути, нормализация / денормализация - это состав и разложение без потерь с использованием операторов projection и join .В этом примере у вас есть избыточность, вызванная другим оператором: суммирование.Я ожидаю, что в принципе вполне возможно сформировать теорию «нормализации» для операторов, отличных от проекции и объединения, возможно, даже для нереляционных функций, таких как суммирование.Однако это не то, как обычно определяется нормализация, и при отсутствии какой-либо надежной основы для действий иначе, я думаю, что мы должны применить денормализацию технического значения, как определено датой в приведенной выше цитате.

2 голосов
/ 30 ноября 2010

так что r2 - это функция от r1, что означает, что r2 - это материализованное представление этой функции от r1

, и в этом примере это будет представление select A, sum(C) from r1 group by A

представления не включены в работу codd по нормализации, но я думаю, что он написал о них

материализация представления обычно делается по причинам кэширования, которые некоторые могут считать формой денормализации, поэтомустатьи о том, как автоматически решить, какое представление материализовать, и, таким образом, сделать это просто чем-то, что база данных могла бы сделать, чтобы иногда сделать их быстрее

, но, как правило, обновления представлений не разрешены, хотя я думаю, что я читал, что codd сказал что-то вроде всегопредставления, которые можно обновлять, должны быть, и были бумаги о том, как заставить это работать в некоторых сложных случаях

1 голос
/ 30 ноября 2010

Мне кажется, пара отношений нарушает пятую нормальную форму.


R2 - проекция R1. Некоторые утверждают, что SUM выходит за рамки реляционной модели. В этом случае SUM является тривиальным расширением COUNT, которое находится в рамках реляционной модели.

...