(De) Нормализация двух отношений

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

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

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

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

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. если да, то почему? если нет, то почему? (по какому правилу? или по какому определению?)

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

РЕДАКТИРОВАТЬ Я принял dportas ответ. Я постараюсь добавить сюда немного: CJDate может провести четкое и строгое различие:

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

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

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

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

4 ответа

Решение

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

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

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

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

(a,d) ∈ r2 ⇔ (a, d) = (a, Σ c), a ∈ πA(r1), c ∈ πCA=a(r1))

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

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

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

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

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

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

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

Я думаю, что пара отношений нарушает пятую нормальную форму.


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

Другие вопросы по тегам