我正在制作各种类型车辆的产品表:汽车,卡车等。它们由一系列国家制造,每个国家都有一系列制造商,如日本有丰田,本田等,美国有福特,通用汽车等。一旦建立了数据库,我就需要进行类似&#34的操作;选择丰田制造的所有车辆"。
存储它的最佳方法是什么?
答案 0 :(得分:1)
数据结构不一定与数组结构相同。关键词是“规范化”:以避免冗余的方式设计表格,并确保表格中的每条记录都包含与描述特定表格主题相关的信息。
可能的结构可能是:
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。
答案 1 :(得分:0)
为什么不只有一张名为Automobiles的表, 然后是像Car,Model,Company,Country
这样的行然后你可以
SELECT * FROM Automobiles WHERE Company = 'Toyota' AND Country = 'Japan'