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