我正在制作一张产品表,例如不同类型的车辆:汽车、卡车等。它们由一系列国家制造,每个国家都有一系列制造商,比如日本有丰田、本田等,美国有福特、通用汽车等等。一旦建立了数据库,我需要进行“选择所有丰田制造的车辆”之类的操作。
存储它的最佳方法是什么?
数据结构不一定与您的数组结构相同。关键词是“规范化”:以一种避免冗余的方式设计表格,并确保表格中的每条记录都包含与描述特定表格主题相关的信息。
一个可能的结构可能是:
create table vehicles(
vid int auto_increment primary key,
void int,
vname nvarchar(32),
vtype int,
vmotor varchar(32), ...)
create table oem (
oid int auto_increment primary key,
oname nvarchar(32),
countryid int, ... )
void
表的列引用(原始设备制造商)表的vehicles
主键。oid
oem
一个典型的查询可以是:
select * from vehicles where
exists (select 1 from oem where oid=void and countryid=7)
countryid
只是一个整数键,引用另一个包含国家名称等的表(此处未列出)。假设国家表的记录 7 包含“日本”,那么上述查询将列出所有在日本制造的车辆。
或者 - 回到你原来的例子 -
select * from vehicles where
exists (select 1 from oem where oid=void and oname='Toyota')
将列出该特定制造商的所有车辆。
这个小例子只是你理解“规范化”的起点。就像 Marc B 已经说过的:自己研究这个概念,你就能自己回答你的问题。这是另一个可能有用的基于示例的链接:http: //db.grussell.org/section008.html。
为什么不只是有一个名为汽车的表,然后是汽车、模型、公司、国家等行
然后你可以
SELECT * FROM Automobiles WHERE Company = 'Toyota' AND Country = 'Japan'