Нормализация требует знания функциональных зависимостей (FD) и зависимостей соединений (FD). Вы их не дали.
Ваше приложение Мы можем сказать вам FD и JD только в том случае, если мы точно знаем, что такое «отношение, которое я хотел выразить» (т.е. предикат) для каждой таблицы (т.е. до такой степени, что мы могли бы посмотреть на ситуацию и знать для каждой возможной строки, составляет ли она истинное предложение из предиката и, следовательно, принадлежит ли она таблице) и какие именно возможные ситуации могут возникнуть (через «бизнес-правила» о возможных ситуациях приложения, эквивалентные ограничениям на возможные состояния базы данных) .
Ваши "ключи" Вы не давали FD. Вы только что дали один ключ-кандидат (CK) и «уникальный ключ». Но вы не можете определить некоторые или все CK, не зная определенных вещей о FD. Поэтому, когда вы даете CK, это то же самое, что говорить, что есть определенные FD, а не они. Вы должны сказать нам, что вы дали нам, когда вы даете некоторые наборы столбцов, помеченные PK или «уникальный ключ»: является ли «уникальный ключ» CK (содержащим не меньшее уникальное подмножество) или просто суперключом (уникальным)? Вы дали все CK или могут быть другие? Могут ли быть другие суперключи, кроме надмножеств данных? Будет очень полезно, если вы просто сообщите нам, какие именно FD, как вы знаете, держат (через минимальное покрытие), а какие, как вы знаете, не держат.
Догадки
Я понятия не имею, для чего нужен is_calculated
.
Может быть, данная пара date
и meal
содержит ровно один content
?
TL;DR Вам действительно нужно проверить каждый возможный набор столбцов, чтобы увидеть, определяет ли он функционально каждый другой столбец. Т.е. появляется ли для каждого состояния базы данных подстрока значений для набора столбцов только с одним значением для столбца. Мы можем только догадываться без четкого понимания ваших предикатов и вашего приложения. Вы можете сократить работу следующим образом: если набор столбцов уникален, то его надмножества определяют все остальные столбцы. Если набор столбцов минимально уникален (является CK), то ни одно из его меньших подмножеств не определяет все остальные столбцы. Вы можете найти контрпримеры к предполагаемым FD, где две строки могут иметь одну и ту же подстроку значений для предполагаемого определителя, но иметь разные значения для предполагаемого детерминированного атрибута. Аксиомы Армстронга порождают все ФП, вытекающие из данных.
JD Нормализация до 4NF и 5NF включает разделение таблицы на несколько таблиц для устранения JD, которые не подразумеваются CK. Предикат таблицы может быть выражен как AND других точно тогда, когда JD соответствует наборам столбцов предикатов. Отношение находится в 5NF, когда каждый конъюнкт в каждом JD перекрывает какой-либо другой по крайней мере на CK. (Алгоритм членства Феджина.)
PS Если вас волнуют ограничения, не потеряли ли вы их, когда перешли от одного стола к двум?
person
philipxy
schedule
02.03.2015