Разработка базы данных для таблицы, которая может иметь несколько необязательных столбцов и зависимостей

Добрый день всем в ТАК.

У меня есть проблема в разработке базы данных для моего проекта, который является производственным модулем фабрики петель. Просто для записи, я использую MySQL, C# .NET Framework и NHibernate для своего проекта.

История вопроса

Для моего проекта будет пункт Item. Элемент определяет, ну, все элементы, включенные в производство петельки. Это может быть сырье (рулон, краска, пластина и т. Д.), Промежуточный предмет (штампованный предмет, на данный момент) и конечный продукт (сборочный предмет, полированный предмет, цветной предмет и т. Д.), Который может быть продан.

Все элементы имеют столбцы Имя, Запас, Порог, но некоторые элементы могут иметь, например, столбцы " Внешний диаметр" или " Цвет", а некоторые элементы не имеют этого. Необязательный столбец здесь зависит от типа элемента (например, катушка имеет только внешний диаметр, внутренний диаметр и высоту. В то время как краска имеет только цвет, а конечный продукт имеет их все) . Предмет также имеет несколько юнитов (кг, шт, пачка и т. Д.), Которые могут быть преобразованы в другие юниты. Опять же, с одним предметом может быть связана только единица измерения в килограммах, в то время как у другого предмета могут быть связаны единицы измерения в килограммах и ПК (и коэффициент конверсии между ними) .

Это то, что я имел в виду.

  1. Вещь
    • Я БЫ
    • ItemType_ID [FK]
    • название
    • Склад
    • Treshold
    • Временная метка (CreatedAt, UpdatedAt, DeletedAt)
    • IsDeleted
  2. измерение
    • Item_ID [FK]
    • Наружный диаметр
    • Внутренний диаметр
    • Рост
  3. цвет
    • Item_ID [FK]
    • цвет
  4. Тип элемента
    • Я БЫ
    • название
  5. Единица измерения
    • Я БЫ
    • название
  6. Item_Unit ассоциативная таблица

    • Item_ID [PK]
    • Unit_ID [PK]

    ... Еще не закончил, пришел сюда за советом.

Я хочу спросить следующее:

  1. Это мой второй дизайн, в то время как мой первый дизайн помещает все необязательные столбцы в таблицу Item и назначает значение NULL, когда пользователь не ввел значение для этого столбца. Лучше использовать мой первый дизайн? Потому что это упрощает мой код (выберите только 1 таблицу) . Но я слышал, что не хорошо иметь нулевое значение в базе данных?
  2. Лучше ли использовать наследование в этом сценарии? Использование родительской таблицы и дочерней таблицы (таблица элементов и таблица катушек в качестве дочерних)?
  3. Для элемента сборки, цветного элемента, полированного элемента у них есть обязательный элемент, который может быть промежуточным элементом или другим конечным элементом (некоторые цветные элементы могут быть изготовлены из промежуточного элемента + краски, а некоторые другие цветные элементы могут быть изготовлены из элемента сборки + краски, при этом сборочный элемент всегда состоит из промежуточных элементов) . Как мне спроектировать стол для удобного поиска? В моей основной форме производства будет комбобокс для выбора компонента.
  4. Как сохранить коэффициент конверсии в этом сценарии?

Любые советы, исправления или даже целые изменения приветствуются. Большое спасибо вам

1 ответ

Решение

С одной таблицей для каждого элемента у вас будет много пустых столбцов. Это не называется плохим дизайном в некоторых случаях, когда Items не сильно отличается

Я бы посоветовал, если у ваших Предметов слишком много других атрибутов, чем для использования отношения "Родитель-ребенок", или лучший способ - использовать модель "сущность-атрибут-значение".

Эта модель будет иметь меньше столбцов, но больше строк. Проверьте, работает ли эта модель для вашей проблемы.

Другие вопросы по тегам