1

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

这是表格的示意图:

我的桌子

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

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

4

2 回答 2

1

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

  • 表 - 汽车表 - 零件(这可能只有一个 id 和一个零件号和一个类型)
  • 表 - part_connections(用零件连接汽车)
  • 表 - part_options(包含所有不在部件表中的选项,如“功率增益”)
  • 表 - part_option_connections(将零件连接到各种零件选项)

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

于 2012-07-29T16:08:36.683 回答
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”。

于 2012-07-29T16:16:06.797 回答