如何为多个选项的多个下拉列表创建数据库模式

时间:2018-11-28 00:14:57

标签: database database-design

假设您有一个计算机型号表,这些计算机型号可以升级不同的部件,例如ram,cpu和存储,并且可用的不同选项存储在下拉列表中。

您将如何在数据库中表示这一点?

我在考虑每种类型的单独表格,例如:

CREATE TABLE IF NOT EXISTS ram(
    primary_key INTEGER PRIMARY KEY,
    size TEXT NOT NULL,
    price REAL NOT NULL
);

CREATE TABLE IF NOT EXISTS cpu(
    primary_key INTEGER PRIMARY KEY,
    cpu_type TEXT NOT NULL,
    price REAL NOT NULL
);

但是,如何将这些记录的多个记录分组在一起以创建下拉分组呢?对于每个选项,是否需要一个单独的表来存储一个下拉列表组的所有主键?或者我可以将它们分组在一个选项表中?还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

作为指导原则,在更多表中选择更多的列,在更多列中选择更多的行。这是因为每个首选项都比另一个选项更易于实现和管理。

您的方法存在的问题是,每当您拥有一种新类型的东西时,您都需要一个新表。这将需要模式更改和新代码来处理。重要的是,您的应用程序将无法发现这些新事物。

相反,为所有内容创建一个表:

create table part (
    id int,
    name varchar(99),
    price real
    -- more columns for attributes that ALL parts have (if any)
)

由于不同的部分具有不同的属性,因此在此表中有很多列是不明智的,其中大多数未使用。为特殊属性创建表:

create table part_attr (
    part_id int references part(id),
    name varchar(99),
    value varchar(99)
    -- possibly other columns
)

然后使用代码将它们全部编织到下拉列表中。