(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НФ):
- Освободить коллекцию отношений от нежелательных зависимостей вставки, обновления и удаления;
- Уменьшить необходимость реструктуризации сбора отношений при введении новых типов данных и, таким образом, увеличить срок службы прикладных программ;
- Сделать реляционную модель более информативной для пользователей;
- Сделать набор отношений нейтральным по отношению к статистике запросов, где эти статистические данные могут изменяться с течением времени.
Как я могу сказать, что если мы определим D как сумму всех Cs из r1, где A из r1 равно A из r2, то, если мы обновим C в r1 и не обновим D в r2, мы можем получить с нежелательной зависимостью обновления, и данные оказываются в несовместимом состоянии, я нахожу эту причину называть r1 и r2 денормализованными и думать о них как о денормализованных. (На самом деле все r2 является функцией r1 и привносит в модель ноль новых фактов; r2 = f(r1))
Итак, вопросы
- мы можем назвать r1 и r2 денормализованными?
- если да, то почему? если нет, то почему? (по какому правилу? или по какому определению?)
НОТА:
Тем, кто находит вопрос (-ы) достаточно интересным, чтобы вставить ответ, я прошу предоставить либо что-то цитируемое, либо представить его в форме конкретных предположений и выводов (или, другими словами, если вы собираетесь поставить в Ваше мнение, пожалуйста, следуйте этому с некоторыми соображениями).
РЕДАКТИРОВАТЬ Я принял 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 ∈ πC(σA=a(r1))
Поскольку это ограничение не является ни ограничением домена, ни ключевым ограничением, r2
не находится в нормальной форме домена / ключа (DKNF).
Я знаю, что DKNF - единственная нормальная форма, которая не определяется в терминах одного отношения, главным образом потому, что она определяется в терминах ограничений, а не зависимостей.
Поэтому r2 является функцией от r1, что означает, что r2 является материализованным представлением этой функции от r1
и в этом примере это будет представление о select A, sum(C) from r1 group by A
взгляды не рассматриваются в работе Кодда по нормализации, но я думаю, что он написал о них
Материализация представления обычно выполняется по причинам кэширования, которые некоторые могут рассматривать как форму денормализации, поэтому были статьи о том, как автоматически решать, какое представление материализовать, таким образом делая его просто тем, что база данных может делать с видом, чтобы иногда сделать их быстрее.
но поскольку обновления к представлениям обычно не разрешаются, хотя я думаю, что я читал, что codd сказал что-то вроде всех представлений, которые могут быть обновлены, и были бумаги о том, как заставить это работать в некоторых сложных случаях.
Я думаю, что пара отношений нарушает пятую нормальную форму.
R2 является проекцией R1. Некоторые утверждают, что SUM выходит за рамки реляционной модели. В этом случае SUM является тривиальным расширением COUNT, которое находится в рамках реляционной модели.