假设您有一个计算机型号表,这些计算机型号可以升级不同的部件,例如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
);
但是,如何将这些记录的多个记录分组在一起以创建下拉分组呢?对于每个选项,是否需要一个单独的表来存储一个下拉列表组的所有主键?或者我可以将它们分组在一个选项表中?还是有更好的方法?
答案 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
)
然后使用代码将它们全部编织到下拉列表中。