database - 如何为多个选项的多个下拉列表创建数据库模式
问题描述
假设您有一个计算机型号表,这些计算机型号可以升级不同的部件,例如内存、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
);
但是,我如何将这些多条记录组合在一起以创建下拉分组?我是否需要为每个选项创建一个单独的表来存储一个下拉列表组的所有主键?或者我可以将它们分组在一个选项表中吗?或者,还有更好的方法?
解决方案
作为指导原则,优先选择更多的列而不是更多的表,并且优先选择更多的行而不是更多的列。这是因为每个首选项都比其他选项更容易实施和管理。
你的方法的问题是每次你有一种新类型的东西时,你都需要一个新表。这将需要架构更改和新代码来处理它。重要的是,您的应用不会发现这些新事物。
相反,为所有事物创建一个表:
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
)
然后使用代码将它们全部编织成下拉列表等。
推荐阅读
- java - 在 Java 11 上安装 tomcat 7 作为服务:NB:JAVA_HOME 应该指向 JDK 而不是 JRE
- python - 如何在 WXPYTHON 中向我的面板显示图像
- python - 带有缩放、concat 和 xstack 的 ffmpeg 过滤器语法的无效命令
- vue.js - 如何将两个v-html合二为一
- java - 尝试使用 AnchorPane 的扩展版本时的实例化和加载异常
- python - 在单元测试中使用 pandas 时的详细日志
- java - 如果我分配了错误的异常,最糟糕的情况是什么?
- git - 无法通过 SSH 连接到 GitHub(但可以连接到 GitLab)
- sorting - 如何推导出冒泡排序比较公式?
- javascript - Strapi Upload Plugin:如何在 cron 作业中上传远程文件