Mysql 这个数据库需要多对多吗?

Mysql 这个数据库需要多对多吗?,mysql,database,database-design,relational-database,Mysql,Database,Database Design,Relational Database,我正在为一个可能的PHP MySQL项目设计一个数据库。 我是关系数据库设计的新手,以前只使用过单表数据库 这是表的示意图: 因此,“Cars”包含每种车型,其他3个表格包含汽车可以安装的部件。 因此,每辆车可以从三个表中的每一个表中获得不同的零件,并且每个零件可以从零件表中安装到不同的车上。实际上,这些零件表中大约有10个 那么,将这些联系在一起的最佳方式是什么?我需要中间的另一张桌子吗? 在链接方面,我需要用键做什么。我会这样做。而不是有三个不同的汽车零件表: table-cars ta

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

这是表的示意图:

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

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

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

  • table-cars table-parts(这将只有一个id和一个part 数字和类型(可能)
  • 表-零件连接(带零件的汽车连接)
  • 表-零件_选项(包括不在列表中的所有选项) 部件表,如“功率增益”)
  • 表-零件选项连接(将零件连接到 各种零件(可选)

这样,添加新部件就容易多了(因为您不需要新的表),也更接近于规范化。

部件中有一些继承性。这些共同特征似乎是:

  • 零件号
  • 价格
还有一些关于排气、软件和进气的零件类型的细节。 有两种策略: -有三个表和三个表上方的一个视图 -有一个带有parttype列的表,可以是表的三个视图

如果你想玩你的设计,你可能想看看我的公司网站。UML2PPP将自动将您的UML设计转换为数据库设计,并允许您“玩”结果

地址: 您将在设计中找到一个示例应用程序。菜单还不允许您通过菜单访问所有表格

通过:

可访问以下表格定义:

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\U部件

+-------------+--------------+------+-----+---------+-------+
| 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_排气

+-------------+--------------+------+-----+---------+-------+
| 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_摄入量

+-------------+--------------+------+-----+---------+-------+
| 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_软件

+-------------+---------------+------+-----+---------+-------+
| 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\u car\u 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\u car\u id列也需要选择

现在,您可以单独编辑每个表,零件视图将同时显示所有零件。
为了能够区分零件类型,您可能需要添加另一列“零件类型”。

编辑后说,现实中大约有10个“零件”表,我不知道,但“视图”是什么意思?谢谢简单的回答是,您可以使用CREATEVIEW命令创建SQL视图,然后像使用表一样使用它。对于详细的回答,我将在Tomorow上发布一个链接。请注意,无论何时链接到您自己的网站/产品,都需要披露。你在这篇文章中这样做了。我强烈建议编辑这篇文章以纠正这一疏忽,这样这篇文章就不会被作为垃圾邮件删除。oops-我花了一天多的时间才找到这个链接: