我正在为可能正在进行的PHP MySQL项目设计数据库。 我是关系数据库设计的完全新手,之前只使用过单表DB。
这是表格的图表:
因此,'汽车'包含每种型号的汽车,其他3个表包含汽车可以安装的部件。 因此,每辆车可以从三个表中的每个表中具有不同的部件,并且每个部件可以从零件表安装到不同的车辆。实际上,这些零件表中大约有10个。
那么,将这些链接在一起的最佳方式是什么?我需要中间的另一张桌子吗? 在链接方面我需要做些什么。
答案 0 :(得分:1)
我会这样做。而不是为汽车零件设置三个不同的表:
通过这种方式,添加新部件会更容易(因为您不需要新的表格),并且它更接近于标准化。
答案 1 :(得分:1)
你的部分有一些继承。常见的属性似乎是:
并且您的零件类型有一些细节,排气,软件和摄入量。 有两种策略: - 在三个表上有三个表和一个视图 - 有一个带有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”。