1

私が取り組んでいる可能性のある PHP MySQL プロジェクトの DB を設計しています。私はリレーショナル DB 設計の初心者で、以前は単一テーブル DB しか扱ったことがありませんでした。

これはテーブルの図です:

マイ テーブル

したがって、'Cars' には車の各モデルが含まれ、他の 3 つのテーブルには車に取り付けることができる部品が含まれます。したがって、各車は 3 つのテーブルのそれぞれから異なるパーツを持つことができ、各パーツはパーツ テーブルから異なる車に取り付けることができます。実際には、これらのパーツ テーブルは約 10 個あります。

では、これらを結び付ける最善の方法は何でしょうか? 真ん中などに別のテーブルが必要ですか?そして、リンクに関してキーをどうする必要があるでしょうか。

4

2 に答える 2

1

私はこのようにします。自動車部品用に 3 つの異なるテーブルを用意する代わりに、次のようにします。

  • テーブル - 車 テーブル - 部品 (これには ID と部品番号とタイプしかありません)
  • テーブル - part_connections (部品と車の接続)
  • テーブル - part_options (「パワーゲイン」などのパーツテーブルにないすべてのオプションを含む)
  • テーブル - part_option_connections (パーツをさまざまなパーツ オプションに接続します)

このようにして、新しいパーツを追加するのがはるかに簡単になり (新しいテーブルが必要ないため)、正規化にも近づきます。

于 2012-07-29T16:08:36.683 に答える
1

あなたの部分にはいくつかの継承があります。一般的な属性は次のようです。

  • 部品番号
  • 価格

また、部品タイプの排気、ソフトウェア、および吸気にはいくつかの詳細があります。2 つの戦略があります。 - 3 つのテーブルと 3 つのテーブルに対する 1 つのビューを持つ - parttype 列を持つ 1 つのテーブルを持ち、テーブルの 3 つのビューになる場合があります。

自分のデザインを試してみたい場合は、私の会社の Web サイト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_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 に答える