2012-07-29 92 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(其部件連接到 各個部分選項)

通過這種方式,添加新零件更容易(因爲您不需要新表),並且它更接近標準化。