2009-08-11 5 views
1

발표 시스템을 만들고 싶습니다. 그러나 나는 데이터베이스 설계 부분을 엉망으로 만들었다.Mysql 데이터베이스 디자인 복잡한 쇼핑 카탈로그 파트

시스템은 무제한 카테고리를해야합니다 그들의 항목은 그래서 모든 카테고리의 뜻은 예를 들어 자동차

는 모델, 무역, 제조 일자, 색상, 기어 유형이 이상한 속성이 있습니다. . . 더

또 다른 예 부동산 문 수를 가지고, 듀블 렉스 삼중 유형, 얼마나 많은 목욕, 또 다른 하나는 전자 얼마나 많은 주방

, 그것을 가지고 메가 픽셀, 기가 바이트, 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

답장을 보내 주셔서 감사합니다 양식에이 값을 사용해야한다는 정보를 잊어 버렸습니다. 양식에 체크 박스 입력 상자 선택 상자 등이 있어야합니다. 그래서 양식 요소로 값을 그룹화해야합니다. 카테고리를 표시하려면? –