2016-01-25 2 views
1

Допустим, есть хранилища, в которых хранятся предметы определенного типа.Функциональная зависимость в другой таблице

Так есть таблицы с полями

  • Склад - ID, имя, тип
  • Предмет - ID, имя, тип
  • WarehouseItem - Склад, Пункт
  • Тип - ID, Имя

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

Является ли эта база данных нормализованной?

(пример этой проблемы выполнен, но я в основном имеют эту проблему в реальной жизни.)

+1

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

+0

Не совсем, я думаю. Склад не содержит все элементы данного типа. Вероятно, вы правы, что должно быть поле Type и поле Warehouse.Type. Но в Хранилище все еще есть только некоторые из этих предметов. Не будет отмечен как разрешенный. Я отредактирую, чтобы уточнить. –

+0

Я не говорил, чтобы сделать поле store.type уникальным, только если отношение существует, оно должно быть материализовано. Несколько складов все равно будут иметь один и тот же тип элемента (но только по одному типу). –

ответ

1

Я делаю некоторые предположения от просто глядя на метаданных без каких-либо примеров данных, но на первый взгляд кажется, что ваша схема по большей части нормализована. Технически говоря, ваша таблица 3NF (которая должна быть ваша цель), если он удовлетворяет всем следующим стандартам:

  • Это также 1NF - Каждая запись содержит только атомарные данные (или одну часть информации)
  • это не является также 2NF - ни один из кандидатов ключ зависимости не означает, что, когда у вас есть есть composite primary key (ключ, состоящие из более чем одного столбца), что все данные зависят от всего ключа
  • это 3NF - нет transitive dependency означает все данные зависят только от primary key и n Ot какой-либо другой столбец в таблице

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

Учитывая это определение:

  • Warehouse появляется 3NF, предполагая, что на каждом складе может быть только один Type. Если нет, то вы будете отказываться от транзитивной зависимости и должны будут переместить информацию Type в новую таблицу.
  • Item тоже появляется 3NF предполагая, может быть назначено только один Type
  • Type, как представляется, содержит избыточные данные и должен быть удален, если вы, конечно, не имеете many-to-many отношений между Type и Warehouse и/или Item. В этом случае вы хотели бы ввести bridge-entity (aka composite entry) между Type и Warehouse или Item для создания двух отношений 1-to-many.
  • Наконец, если я правильно это читаю, WarehouseItem представляется мостом-сущностью между Warehouse и Item, чтобы разбить many-to-many отношения между ними.Если это правильно, вы должны быть уверены, что эта таблица 3NF, если комбинация Warehouse и Item представляет собой composite key.

Так предполагая, я истолковал вашу схему правильно, как только вы устранить избыточную Type таблицу, то да, я бы сказал, эта установка технически соответствует 3NF. Обратите внимание, что требование о том,

учитывая, что склад содержит только товары с определенного типа

может потребовать от вас ввести новый типа поле, которое будет означать, что вам нужно пересмотреть ваш нормализации этой таблицы , Если у вас есть два разных типа (a WarehouseType и ItemType), вам может потребоваться сохранить таблицу Type и превратить ее в таблицу сопоставления между этими двумя новыми полями. Но мне нужно будет увидеть примеры данных для лучшей оценки.

+0

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

+0

Это должно быть относительно легко исправлено, добавив ограничение в таблицу WarehouseItem, чтобы гарантировать, что соответствие должно существовать. MySQL обрабатывает ограничения несколько иначе, чем другие базы данных, но вы можете найти более подробную информацию здесь: http://dev.mysql.com/doc/refman/5.7/en/constraints.html – DanK

+1

«Обратите внимание, что существуют также более высокие нормированные формы, но они в основном академические, поскольку вы начинаете испытывать ухудшение производительности, тем больше вы нормализуетесь ». Это неверно и опасно говорить людям. Я часто видел, что нормализованные схемы выполняют * лучше *, чем денормализованные в определенных механизмах и шаблонах запросов. https://www.simple-talk.com/blogs/2008/07/21/the-myth-of-over-normalization/ –

Смежные вопросы