这个DB需要多少人?

时间:2012-07-29 16:02:19

标签: mysql database database-design relational-database

我正在为可能正在进行的PHP MySQL项目设计数据库。 我是关系数据库设计的完全新手,之前只使用过单表DB。

这是表格的图表:

My tables

因此,'汽车'包含每种型号的汽车,其他3个表包含汽车可以安装的部件。 因此,每辆车可以从三个表中的每个表中具有不同的部件,并且每个部件可以从零件表安装到不同的车辆。实际上,这些零件表中大约有10个。

那么,将这些链接在一起的最佳方式是什么?我需要中间的另一张桌子吗? 在链接方面我需要做些什么。

2 个答案:

答案 0 :(得分:1)

我会这样做。而不是为汽车零件设置三个不同的表:

  • table - cars table - parts(这只有一个id和一个部分 数字和类型也许)
  • table - part_connections(连接汽车和零件)
  • table - part_options(包含所有不在的选项) 零件表如“功率增益”)
  • table - part_option_connections(将部分连接到 各种部分选项)

通过这种方式,添加新部件会更容易(因为您不需要新的表格),并且它更接近于标准化。

答案 1 :(得分:1)

你的部分有一些继承。常见的属性似乎是:

  • PART_NUMBER

并且您的零件类型有一些细节,排气,软件和摄入量。 有两种策略: - 在三个表上有三个表和一个视图 - 有一个带有parttype列的表,可能是表的三个视图。

如果您想使用您的设计,可能需要查看我的公司网站http://www.uml2php.com。 UML2PHP会自动将您的UML设计转换为数据库设计,让您“玩”结果。

目前: http://service.bitplan.com/uml2phpexamples/carparts/ 你会在你的设计中找到一个示例应用。菜单不允许您通过菜单访问所有表格。

通过: http://service.bitplan.com/uml2phpexamples/carparts/index.php?function=dbCheck

可以访问表定义:

mysql> describe CP01_car;
+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| oid         | varchar(32)   | NO   |     | NULL    |       |
| car_id      | varchar(255)  | NO   | PRI | NULL    |       |
| model       | varchar(255)  | YES  |     | NULL    |       |
| description | text          | YES  |     | NULL    |       |
| model_year  | decimal(10,0) | YES  |     | NULL    |       |
+-------------+---------------+------+-----+---------+-------+

的MySQL>描述CP01_part;

+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| oid         | varchar(32)  | NO   |     | NULL    |       |
| part_number | varchar(255) | NO   | PRI | NULL    |       |
| price       | varchar(255) | YES  |     | NULL    |       |
| car_car_id  | varchar(255) | YES  |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+

的MySQL>描述cp01_exhaust;

+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| oid         | varchar(32)  | NO   |     | NULL    |       |
| type        | varchar(255) | YES  |     | NULL    |       |
| part_number | varchar(255) | NO   | PRI | NULL    |       |
| price       | varchar(255) | YES  |     | NULL    |       |  
+-------------+--------------+------+-----+---------+-------+

的MySQL>描述CP01_intake;

+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| oid         | varchar(32)  | NO   |     | NULL    |       |
| part_number | varchar(255) | NO   | PRI | NULL    |       |
| price       | varchar(255) | YES  |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+

的MySQL>描述CP01_software;

+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| oid         | varchar(32)   | NO   |     | NULL    |       |
| power_gain  | decimal(10,0) | YES  |     | NULL    |       |
| part_number | varchar(255)  | NO   | PRI | NULL    |       |
| price       | varchar(255)  | YES  |     | NULL    |       |
+-------------+---------------+------+-----+---------+-------+

上表是从UML模型生成的,结果不符合您的需求。 特别是如果你想有10个或更多的桌子喜欢这个。所有表格中都应提供将您的零件链接到汽车表的字段car_car_id。根据设计方案,部件的基础“表”应该是这样的视图:

的MySQL>

create view partview as 
select       oid,part_number,price from CP01_software 
union select oid,part_number,price from CP01_exhaust 
union select oid,part_number,price from CP01_intake;

当然还需要选择car_car_id列;

现在您可以自行编辑每个表格,而partview将一起显示所有部分。 为了能够区分部件类型,您可能需要添加另一列“part_type”。