2012-07-29 105 views
1

我正在设计一个可能的PHP MySQL项目的数据库,我可能正在进行。 我是关系数据库设计的完全新手,而且之前只使用过单表数据库。这个数据库需要多少?

这是表的示意图:

My tables

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

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

+0

编辑说现在会有大约10个“零件”表 – 2012-07-29 16:23:56

回答

1

你的部件有一些继承。公共属性似乎是:

  • PART_NUMBER
  • 价格

也有一些细节你的部分型号汽车排气,软件和摄入。 有两种策略: - 在三个表格中有三个表格和一个视图 - 有一个表格包含parttype列,可能有三个视图用于表格。

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

At: 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> describe 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> describe 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> describe 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”的零件类型。

+0

请原谅我的无知,但是您的意思是“意见”是什么意思?谢谢! – 2012-07-29 16:30:46

+1

简短的回答是,您可以使用CREATE VIEW命令创建一个SQL视图,而不是像使用表一样使用它。对于长时间的回答,我会发布一个链接tommorow。 – 2012-07-29 20:48:53

+0

请注意,只要您链接到您自己的网站/产品,就会披露*必填*。你在这篇文章中已经这样做了。我强烈建议编辑这篇文章来解决这个问题,以便这篇文章不会被删除为垃圾邮件。 – 2012-10-15 23:36:42

1

我会这样做。而不必为汽车零部件三个不同的表:

  • 表 - 汽车表 - 组成部分(这将只有一个ID和一个部分 数量和类型也许)
  • 表 - part_connections(connectin汽车零部件)
  • 表 - part_options(与所有的arent在 部分表,如“功率增益”的选项)
  • 表 - part_option_connections(其部件连接到 各个部分选项)

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