Разработка базы данных для таблицы, которая может иметь несколько необязательных столбцов и зависимостей
Добрый день всем в ТАК.
У меня есть проблема в разработке базы данных для моего проекта, который является производственным модулем фабрики петель. Просто для записи, я использую MySQL, C# .NET Framework и NHibernate для своего проекта.
История вопроса
Для моего проекта будет пункт Item. Элемент определяет, ну, все элементы, включенные в производство петельки. Это может быть сырье (рулон, краска, пластина и т. Д.), Промежуточный предмет (штампованный предмет, на данный момент) и конечный продукт (сборочный предмет, полированный предмет, цветной предмет и т. Д.), Который может быть продан.
Все элементы имеют столбцы Имя, Запас, Порог, но некоторые элементы могут иметь, например, столбцы " Внешний диаметр" или " Цвет", а некоторые элементы не имеют этого. Необязательный столбец здесь зависит от типа элемента (например, катушка имеет только внешний диаметр, внутренний диаметр и высоту. В то время как краска имеет только цвет, а конечный продукт имеет их все) . Предмет также имеет несколько юнитов (кг, шт, пачка и т. Д.), Которые могут быть преобразованы в другие юниты. Опять же, с одним предметом может быть связана только единица измерения в килограммах, в то время как у другого предмета могут быть связаны единицы измерения в килограммах и ПК (и коэффициент конверсии между ними) .
Это то, что я имел в виду.
- Вещь
- Я БЫ
- ItemType_ID [FK]
- название
- Склад
- Treshold
- Временная метка (CreatedAt, UpdatedAt, DeletedAt)
- IsDeleted
- измерение
- Item_ID [FK]
- Наружный диаметр
- Внутренний диаметр
- Рост
- цвет
- Item_ID [FK]
- цвет
- Тип элемента
- Я БЫ
- название
- Единица измерения
- Я БЫ
- название
Item_Unit ассоциативная таблица
- Item_ID [PK]
- Unit_ID [PK]
... Еще не закончил, пришел сюда за советом.
Я хочу спросить следующее:
- Это мой второй дизайн, в то время как мой первый дизайн помещает все необязательные столбцы в таблицу Item и назначает значение NULL, когда пользователь не ввел значение для этого столбца. Лучше использовать мой первый дизайн? Потому что это упрощает мой код (выберите только 1 таблицу) . Но я слышал, что не хорошо иметь нулевое значение в базе данных?
- Лучше ли использовать наследование в этом сценарии? Использование родительской таблицы и дочерней таблицы (таблица элементов и таблица катушек в качестве дочерних)?
- Для элемента сборки, цветного элемента, полированного элемента у них есть обязательный элемент, который может быть промежуточным элементом или другим конечным элементом (некоторые цветные элементы могут быть изготовлены из промежуточного элемента + краски, а некоторые другие цветные элементы могут быть изготовлены из элемента сборки + краски, при этом сборочный элемент всегда состоит из промежуточных элементов) . Как мне спроектировать стол для удобного поиска? В моей основной форме производства будет комбобокс для выбора компонента.
- Как сохранить коэффициент конверсии в этом сценарии?
Любые советы, исправления или даже целые изменения приветствуются. Большое спасибо вам
1 ответ
С одной таблицей для каждого элемента у вас будет много пустых столбцов. Это не называется плохим дизайном в некоторых случаях, когда Items
не сильно отличается
Я бы посоветовал, если у ваших Предметов слишком много других атрибутов, чем для использования отношения "Родитель-ребенок", или лучший способ - использовать модель "сущность-атрибут-значение".
Эта модель будет иметь меньше столбцов, но больше строк. Проверьте, работает ли эта модель для вашей проблемы.