2009-08-11 15 views
1

私はアナウンスシステムを作りたいと思います。しかし、私はデータベース設計の部分を乱した。Mysqlデータベース設計複雑なショッピングカタログPart

システムは、すべてのカテゴリの意志は、例えば、自動車のための奇妙な性質

を持っているので、無制限のカテゴリとそのアイテムを持っていますモデル、貿易、製造年月日、色、ギアタイプがあります。 。 。そして、より

別の例では、不動産は、ドアの数を持って、デュプレックストリプレックスタイプのガーデニング、どのように多くのお風呂、どのように多くの台所

もう一つは、電子することができ、それはメガピクセル、ギガバイト、warrantie、解像度、寸法を有し、出荷。 。 。

どのように私はこれらのデータを一緒に収集することができますいくつかのオブジェクトは、おそらくどのように私はデータを使用することができますので、ほとんどの項目はmanufacterの日付を持っている必要がありますスキーマはどのようにできますか?

セルジャンVirlan

+0

カテゴリの明確なリストがありますか、誰かが任意のプロパティを持つカテゴリをいつでも追加したいと思うかもしれませんか? –

答えて

3

マインドます、これは非常に漠然とした質問ですので、私は答えるように:)

注全力をしようとしています:そこにこれを行うには、多くのより良い方法がある、と私はなぜ疑問でしたあなたはこのようにしていますが、以下の方法はあなたが探しているものを達成するはずです!

CREATE TABLE `object` (
`id` INTEGER NOT NULL AUTO_INCREMENT , 
`category` INTEGER NOT NULL , 
`name` VARCHAR(100) NOT NULL , 
PRIMARY KEY (`id`) 
); 

CREATE TABLE `properties` (
`id` INTEGER NOT NULL AUTO_INCREMENT , 
`objectid` INTEGER NOT NULL , 
`property_key` VARCHAR(100) NOT NULL , 
`property_value` MEDIUMTEXT NOT NULL , 
PRIMARY KEY (`id`) 
); 

CREATE TABLE `category` (
`id` INTEGER NOT NULL AUTO_INCREMENT , 
`name` VARCHAR(100) NOT NULL , 
PRIMARY KEY (`id`) 
); 

は現在、いくつかは、それらにデータをふり追加することができます::今

INSERT INTO category VALUES ("","CAR"); 
INSERT INTO category VALUES ("","REALESTATE"); 
INSERT INTO category VALUES ("","ELECTRONIC"); 
INSERT INTO object VALUES ("",1,"98 CAMERO"); 
INSERT INTO object VALUES ("",1,"06 PRIUS"); 
INSERT INTO object VALUES ("",2,"A House Someplace"); 
INSERT INTO object VALUES ("",3,"iPod Touch"); 
INSERT INTO object VALUES ("",3,"iPhone"); 
INSERT INTO object VALUES ("",3,"Zune"); 
INSERT INTO properties VALUES ("",1,"color","red"); 
INSERT INTO properties VALUES ("",1,"doors","4"); 
INSERT INTO properties VALUES ("",1,"engine","v6"); 
INSERT INTO properties VALUES ("",2,"engine","electric"); 
INSERT INTO properties VALUES ("",2,"doors","4"); 
INSERT INTO properties VALUES ("",2,"color","blue"); 
INSERT INTO properties VALUES ("",6,"video-playback","true"); 
INSERT INTO properties VALUES ("",4,"video-playback","true"); 
INSERT INTO properties VALUES ("",5,"video-playback","true"); 
INSERT INTO properties VALUES ("",6,"manufacturer","microsoft"); 
INSERT INTO properties VALUES ("",5,"manufacturer","apple"); 
INSERT INTO properties VALUES ("",4,"manufacturer","apple"); 

が、ここで我々のデータはどのように見えるかです

はここ3つのテーブルです。

mysql> select * from object; 
+----+----------+-------------------+ 
| id | category | name    | 
+----+----------+-------------------+ 
| 1 |  1 | 98 CAMERO   | 
| 2 |  1 | 06 PRIUS   | 
| 3 |  2 | A House Someplace | 
| 4 |  3 | iPod Touch  | 
| 5 |  3 | iPhone   | 
| 6 |  3 | Zune    | 
+----+----------+-------------------+ 
6 rows in set (0.00 sec) 

mysql> select * from category; 
+----+-------------+ 
| id | name  | 
+----+-------------+ 
| 1 | CAR   | 
| 2 | REALESTATE | 
| 3 | ELECTRONICS | 
+----+-------------+ 
3 rows in set (0.00 sec) 

mysql> select * from properties; 
+----+----------+----------------+----------------+ 
| id | objectid | property_key | property_value | 
+----+----------+----------------+----------------+ 
| 1 |  1 | color   | red   | 
| 2 |  1 | doors   | 4    | 
| 3 |  1 | engine   | v6    | 
| 4 |  2 | engine   | electric  | 
| 5 |  2 | doors   | 4    | 
| 6 |  2 | color   | blue   | 
| 7 |  6 | video-playback | true   | 
| 8 |  4 | video-playback | true   | 
| 9 |  5 | video-playback | true   | 
| 10 |  6 | manufacturer | microsoft  | 
| 11 |  5 | manufacturer | apple   | 
| 12 |  4 | manufacturer | apple   | 
+----+----------+----------------+----------------+ 
12 rows in set (0.00 sec) 

あなたは、これらすべてのテーブルにカテゴリ、無制限の数、性質の無制限の数、およびオブジェクトの数に制限を追加することができます。一緒にそれらすべてに参加するには今すぐ

mysql> SELECT * FROM object 
    -> LEFT JOIN category ON object.category = category.id 
    -> LEFT JOIN properties ON properties.objectid = object.id; 
+----+----------+-------------------+------+-------------+------+----------+----------------+----------------+ 
| id | category | name    | id | name  | id | objectid | property_key | property_value | 
+----+----------+-------------------+------+-------------+------+----------+----------------+----------------+ 
| 1 |  1 | 98 CAMERO   | 1 | CAR   | 1 |  1 | color   | red   | 
| 1 |  1 | 98 CAMERO   | 1 | CAR   | 2 |  1 | doors   | 4    | 
| 1 |  1 | 98 CAMERO   | 1 | CAR   | 3 |  1 | engine   | v6    | 
| 2 |  1 | 06 PRIUS   | 1 | CAR   | 4 |  2 | engine   | electric  | 
| 2 |  1 | 06 PRIUS   | 1 | CAR   | 5 |  2 | doors   | 4    | 
| 2 |  1 | 06 PRIUS   | 1 | CAR   | 6 |  2 | color   | blue   | 
| 3 |  2 | A House Someplace | 2 | REALESTATE | NULL |  NULL | NULL   | NULL   | 
| 4 |  3 | iPod Touch  | 3 | ELECTRONICS | 8 |  4 | video-playback | true   | 
| 4 |  3 | iPod Touch  | 3 | ELECTRONICS | 12 |  4 | manufacturer | apple   | 
| 5 |  3 | iPhone   | 3 | ELECTRONICS | 9 |  5 | video-playback | true   | 
| 5 |  3 | iPhone   | 3 | ELECTRONICS | 11 |  5 | manufacturer | apple   | 
| 6 |  3 | Zune    | 3 | ELECTRONICS | 7 |  6 | video-playback | true   | 
| 6 |  3 | Zune    | 3 | ELECTRONICS | 10 |  6 | manufacturer | microsoft  | 
+----+----------+-------------------+------+-------------+------+----------+----------------+----------------+ 
13 rows in set (0.00 sec) 

データベースは非常に重いワークロードに課税になった場合、それが遅くなる可能性がありかかわらず、私は、その無限にスケーラブルなソリューション、これはあなたが探しているものであると思いますちょうどその設計のために。

+0

あなたの返信のためにありがとう フォームにこれらの値を使用する必要があることを私は忘れています少しの情報がありました フォームにはチェックボックス入力ボックスのセレクトボックスなどが必要です。カテゴリを表示するには? –