我正在設計一個可能的PHP MySQL項目的數據庫,我可能正在進行。 我是關係數據庫設計的完全新手,而且之前只使用過單表數據庫。這個數據庫需要多少?
這是表的示意圖:
所以,「汽車」包含汽車的每個模型,並且其他3個表包含該車可裝配有部件。 因此,每輛車可以從三個表中的每一個具有不同的部件,並且每個部件可以從部件表安裝到不同的汽車。實際上,這些零件表中大約有10個。
那麼,將這些鏈接在一起的最佳方法是什麼?我需要另一張桌子在中間等嗎? 以及在鏈接方面我需要做什麼。
我正在設計一個可能的PHP MySQL項目的數據庫,我可能正在進行。 我是關係數據庫設計的完全新手,而且之前只使用過單表數據庫。這個數據庫需要多少?
這是表的示意圖:
所以,「汽車」包含汽車的每個模型,並且其他3個表包含該車可裝配有部件。 因此,每輛車可以從三個表中的每一個具有不同的部件,並且每個部件可以從部件表安裝到不同的汽車。實際上,這些零件表中大約有10個。
那麼,將這些鏈接在一起的最佳方法是什麼?我需要另一張桌子在中間等嗎? 以及在鏈接方面我需要做什麼。
你的部件有一些繼承。公共屬性似乎是:
也有一些細節你的部分型號汽車排氣,軟件和攝入。 有兩種策略: - 在三個表格中有三個表格和一個視圖 - 有一個表格包含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」的零件類型。
請原諒我的無知,但是您的意思是「意見」是什麼意思?謝謝! – 2012-07-29 16:30:46
簡短的回答是,您可以使用CREATE VIEW命令創建一個SQL視圖,而不是像使用表一樣使用它。對於長時間的回答,我會發佈一個鏈接tommorow。 – 2012-07-29 20:48:53
請注意,只要您鏈接到您自己的網站/產品,就會披露*必填*。你在這篇文章中已經這樣做了。我強烈建議編輯這篇文章來解決這個問題,以便這篇文章不會被刪除爲垃圾郵件。 – 2012-10-15 23:36:42
我會這樣做。而不必爲汽車零部件三個不同的表:
通過這種方式,添加新零件更容易(因爲您不需要新表),並且它更接近標準化。
編輯說現在會有大約10個「零件」表 – 2012-07-29 16:23:56