Я делаю некоторые предположения от просто глядя на метаданных без каких-либо примеров данных, но на первый взгляд кажется, что ваша схема по большей части нормализована. Технически говоря, ваша таблица 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
и превратить ее в таблицу сопоставления между этими двумя новыми полями. Но мне нужно будет увидеть примеры данных для лучшей оценки.
В этом случае, более чем нарушение одного из правил нормализации, я бы сказал, что ваша схема реализует другую базу данных, чем ваши требования. (если склад будет содержать только элементы того же типа, этот тип относится к складу). –
Не совсем, я думаю. Склад не содержит все элементы данного типа. Вероятно, вы правы, что должно быть поле Type и поле Warehouse.Type. Но в Хранилище все еще есть только некоторые из этих предметов. Не будет отмечен как разрешенный. Я отредактирую, чтобы уточнить. –
Я не говорил, чтобы сделать поле store.type уникальным, только если отношение существует, оно должно быть материализовано. Несколько складов все равно будут иметь один и тот же тип элемента (но только по одному типу). –