Нормализация и структура базы данных
У меня есть структура данных, которая имеет следующие таблицы
Customers
Transactions (Type A)
Transactions (Type B)
Мы добавляем Comments
Таблица
Customers
есть еще один из Transactions A
а также Transactions B
Comments
может быть связано либо с Transactions
или Customer
Мы проводим внутреннее обсуждение формата базы данных.
Одна сторона хочет создать таблицу комментариев и 3 кросс-таблицы. Одна сторона хочет создать таблицу комментариев с внешним ключом для клиента и двумя обнуляемыми ключами для транзакций.
Существует ли правило нормальной формы, которое гласит, что одно лучше другого? Есть ли консенсус?
РЕДАКТИРОВАТЬ:
Больше ответов и особенностей
- Комментарии никогда не будут связаны с более чем одним клиентом
- Комментарии никогда не будут связаны с более чем одной транзакцией
- Комментарии будут когда-либо связаны только с Транзакцией A, Транзакцией B или ни с одним; но никогда не
- Клиенты и транзакции могут иметь 0 или более комментариев
1 ответ
Наиболее важные нормальные формы (1NF-6NF,BCNF и производные) не допускают нулевые значения в таблицах, поскольку все они основаны только на отношениях со значениями, а не на нулевых. Более полезным является принцип разработки, называемый принципом ортогонального проектирования, который определяет, что кортежи с одинаковыми атрибутами не должны появляться в нескольких местах в вашей схеме. Вполне вероятно, что ваши две таблицы транзакций и наличие комментариев в нескольких местах нарушили бы это правило ортогонального дизайна.
Вы можете создать родительскую таблицу транзакций, которая объединяет общие атрибуты ваших двух таблиц транзакций, включая атрибут комментария (шаблон супертипа / подтипа).