(De) Нормализация двух соотношений
Люди, которые читают C.J.Date Введение в систему баз данных или книги аналогичного уровня, не должны иметь проблем с определением нормализации и денормализации.
Однако память не то, чем она была раньше, и я часто нахожу, что я смотрю на какой-то дизайн и говорю, что она не нормализована, хотя я не могу найти, какая из нормальных форм она нарушает.
Фактический пример, иллюстрирующий это:
Если мы имеем отношения
r1 (A, B, C)
и r2 (A, D)
с FDs: AB- > C и A- > D
и r1
представляют собой подробные данные, а r2
- сводка этих данных (другими словами, каждый экземпляр D является функцией значений в r1. В этом примере пусть это будет промежуточным значением значений C в соответствии с A из г1).
Пример экземпляра
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, комментируя причины нормализации за пределами 1NF):
- Чтобы освободить коллекцию отношений от нежелательной вставки, обновления и удаления;
- Чтобы уменьшить необходимость в реструктуризации коллекции отношений, поскольку новые типы данных вводит и тем самым увеличивает срок службы диапазон прикладных программ;
- Сделать реляционную модель более информативной для пользователей;
- Сделать коллекцию отношений нейтральной для запроса статистика, в которой эти статистические данные которые могут измениться с течением времени.
Как я могу сказать, если мы определим D как сумму всех Cs из r1, где A из r1 равно A из r2, то, если мы обновим C в r1, и мы не обновим D в r2, мы может закончиться нежелательной зависимостью от обновления, а данные заканчиваются в несогласованном состоянии. Я нахожу эту причину, чтобы вызвать r1 и r2 денормализованными и думать о них как денормализованные. (На самом деле целое r2 является функцией от r1 и возвращает нулю новые факты в модель: r2 = f (r1))
Итак, вопросы:
- можно ли назвать r1 и r2 денормализованным?
- если да, то почему? если нет, то почему? (в соответствии с которым правило? или согласно определению?)
Примечание:
Тем, кто набирает достаточно интересные вопросы, чтобы ответить на них, я прошу предоставить либо что-то цитируемое, либо поставить его в виде конкретных предположений и выводов (или, другими словами, если вы собираетесь ввести ваше мнение, пожалуйста, следуйте ему с некоторыми соображениями).
ИЗМЕНИТЬ
Я принял ответ dportas. Я попытаюсь немного добавить сюда:
C.J.Date может делать четкое и четкое различие:
Большая часть теории дизайна связана с сокращение избыточности; нормализация уменьшает избыточность в пределах relvars, ортогональность уменьшает его relvars.
цитируется Глубина базы данных: теория реляционных отношений для практиков
и на следующей странице
как неспособность нормализовать все путь подразумевает избыточность и может привести к некоторые аномалии, так и несоблюдение ортогональности.
Ответы
Ответ 1
Предполагая, что AB является ключом в r1, а A является ключом в r2, тогда кажется, что схема находится в 6NF. Словарь реляционной базы данных (Date) определяет денормализацию как:
Замена набора relvars R1, R2,.,., Rn их объединением R, такие, что для все я проекция R на атрибуты Ri гарантированы равный Ri (i = 1, 2,..., n).
В сущности, нормализация/денормализация связана с композицией и разложением без потерь с использованием операторов проекции и объединения. В этом примере у вас есть избыточность, вызванная другим оператором: суммирование. Я ожидаю, что в принципе вполне возможно сформировать теорию "нормализации" для операторов, отличных от проекции и объединения, возможно, даже для нереляционных функций, таких как суммирование. Это не то, как нормализуется условно, однако, и при отсутствии какой-либо обоснованной основы для этого я думаю, что мы должны применять денормализацию технического значения, как определено в Дате в приведенной выше цитате.
Ответ 2
Ваше определение столбца 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 - единственная нормальная форма, о которой я знаю, которая не определена в терминах одного отношения, главным образом потому, что она определяется с точки зрения ограничений, а не зависимостей.
Ответ 3
так что r2 является функцией от r1, которая означает, что r2 является <сильным > материализованным представлением этой функции от r1
и в этом примере это будет представление select A, sum(C) from r1 group by A
Представления не рассматриваются в работе codd по нормализации, но я думаю, что он писал о них
материализация представления обычно выполняется по причинам кэширования, которые некоторые могут рассматривать как форму денормализации, поэтому были документы по автоматическому решению о том, какое представление материализуется, делая таким образом что-то, что может сделать база данных с целью сделать их быстрее иногда
но поскольку обновления представлений, как правило, не разрешены, хотя я думаю, что я читал, что codd сказал что-то вроде всех представлений, которые могут быть доступны для обновления, и были документы о том, как это работать в некоторых сложных случаях.
Ответ 4
Я думаю, что пара отношений нарушает пятую нормальную форму.
R2 - проекция R1. Некоторые утверждают, что СУМ выходит за рамки реляционной модели. В этом случае SUM является тривиальным расширением COUNT, которое находится в рамках реляционной модели.