首页 > 解决方案 > 如何为多个选项的多个下拉列表创建数据库模式

问题描述

假设您有一个计算机型号表,这些计算机型号可以升级不同的部件,例如内存、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
);

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

标签: databasedatabase-design

解决方案


作为指导原则,优先选择更多的列而不是更多的表,并且优先选择更多的行而不是更多的列。这是因为每个首选项都比其他选项更容易实施和管理。

你的方法的问题是每次你有一种新类型的东西时,你都需要一个新表。这将需要架构更改和新代码来处理它。重要的是,您的应用不会发现这些新事物。

相反,为所有事物创建一个表:

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
)

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


推荐阅读