具有可变数量字段的数据库结构设计

时间:2011-07-20 13:27:53

标签: mysql database

对于某种库存系统,用户可以创建具有某些属性的item_type,现在每种类型的属性数量都是可变的。我应该如何使用DBS结构呢?只需制作X个propertyX字段,或者是否有其他方法可以通过这种方式实现灵活性?

note 我不想自动创建表,因为那是不可管理的。

3 个答案:

答案 0 :(得分:4)

通常的方法就是这样(伪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)设置唯一约束,以确保每个项目仅为每个项目设置一次

答案 1 :(得分:3)

将一个属性表与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属性。

答案 2 :(得分:1)

您可以通过创建Properties表来实现动态数量的属性,每个属性引用您的Items表。 e.g。

Items Table

Id  Name


Properties Table

Id  ItemId  Name  Value

通过这种方式,您不仅可以使用静态数量的属性,甚至可以使用相同的属性。 Properties表基本上是一个名称/值对的字典表,与Items表有很强的联系。