Проектирование структуры базы данных с переменным количеством полей - PullRequest
2 голосов
/ 20 июля 2011

Для некоторой системы инвентаризации пользователь может создать item_type, который имеет определенные свойства, теперь количество свойств варьируется в зависимости от типа. Как мне с этим работать с DBStructure?Просто сделайте количество X * полей propertyX, или есть какой-то другой способ добиться гибкости таким способом?

note Я не хочу автоматически создавать таблицы, так как этоне управляемый.

Ответы [ 3 ]

4 голосов
/ 20 июля 2011

Обычный способ сделать это так (псевдо-SQL):

create table property_types (
  property_id int primary key,
  name varchar,
  -- more info here
);

create table items (
  item_id int primary key,
  -- your item table
);

-- this table links a property value with an item
create table item_properties (
  item_id int,
  property_id int,
  property_value varchar,
  foreign key fk_item (item_id) references items (item_id),
  foreign key fk_property (property_id) references properties (property_id)
);

При желании вы можете иметь уникальное ограничение для item_properties (item_id, property_id), чтобы гарантировать, что каждое свойство установлено толькоодин раз за вещь

3 голосов
/ 20 июля 2011

Иметь таблицу свойств, которая связана n: 1 с таблицей item_type следующим образом:

TABLE item_type (
  item_type_id INT,
  ... )

TABLE properties (
  property_id INT, -- primary key
  item_type_id INT, -- foreign key for item_type
  key NVARCHAR(max), -- adjust type to your needs
  value NVARCHAR(max) )

Таким образом, каждый item_type может иметь свойства 0: n.

1 голос
/ 20 июля 2011

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

Items Table

Id  Name


Properties Table

Id  ItemId  Name  Value

Таким образом, вы не ограничены статическим количеством свойств или даже одинаковыми свойствами.Таблица Properties по существу будет словарной таблицей пар имя / значение с сильной привязкой к вашей таблице Items.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...