在表上存储任意属性

时间:2012-06-26 20:03:12

标签: sql

我有3个表,xyz。我希望能够随意附加 属性到每个表中的每一行。 xyz中没有任何内容 除了它们都有一个称为整数主键的事实之外 id并且应该能够附加任意属性。

制作单个属性表是否更好,例如

create table attributes (
    table enum('x', 'y', 'z'),
    xyz_id integer,
    name varchar(50),
    value text,
    primary key (table, xyz_id, name)
);

或者最好是制作单独的表格,例如

create table x_attributes (
    x_id integer,
    name varchar(50),
    value text,
    primary key (x_id, name),
    foreign key (x_id) references x (id)
);
create table y_attributes (...);
create table z_attributes (...);

第二个选项(单独的表格)似乎更清晰,但需要很多 数据库端和应用程序端的更多样板文件。

我也愿意接受除这两项以外的建议。

注意:我已经考虑过使用像MongoDB这样的文档存储的可能性,但是 我正在使用的数据基本上是关系型的。

1 个答案:

答案 0 :(得分:0)

使用带有枚举列的一个表,从长远来看,它将更容易抓取每一行的所有属性。