-4

我正在制作一张产品表,例如不同类型的车辆:汽车、卡车等。它们由一系列国家制造,每个国家都有一系列制造商,比如日本有丰田、本田等,美国有福特、通用汽车等等。一旦建立了数据库,我需要进行“选择所有丰田制造的车辆”之类的操作。

存储它的最佳方法是什么?

4

2 回答 2

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主键。oidoem

一个典型的查询可以是:

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

于 2013-09-09T22:01:53.143 回答
0

为什么不只是有一个名为汽车的表,然后是汽车、模型、公司、国家等行

然后你可以

SELECT * FROM Automobiles WHERE Company = 'Toyota' AND Country = 'Japan'
于 2013-09-09T21:49:15.843 回答