2014-04-14 2 views
0

mysql 테이블의 각 행은 다른 항목을 나타냅니다. 각 항목은 내가 그 정보를 저장하는 전반적인 최선의 방법이 무엇인지 궁금 "Scout,Spy,Pyro"mysql 열에 목록 저장

과 같은 하나 개 이상의 요소와 9까지의 목록이 될 수있는 속성 used_by_classes을 가지고 있습니다.

위의 목록처럼 테이블 used_by_classes에 저장하고 PHP로 폭발 시켰습니다.

$classes= explode(",", $used_by_classes); 

하지만 그건 믿을 만하고 어리석은 일입니다. 9 개의 개별 열을 만드는 것이 또 다른 대안이지만 더 복잡한 점이 있습니다. 이걸 어떻게 다룰 거니?

+2

처럼 별도의 테이블을 작성하고 PARENT_ID, used_by_class을 사용하고 부모 ID에 키가 저장합니다. – hd1

+2

일반 양식을 작성하는 것이 좋습니다. http://www.tutorialspot.com/sql/third-normal-form.htm –

답변

1

다중 값 특성의 경우 정규 패턴은 두 번째 테이블을 만드는 것입니다. 새 테이블의 각 행에는 속성의 값 하나가 저장됩니다.

첫 번째 테이블은

item (id int unsigned primary key, ...) 

경우 두 번째 표는 무언가 같이 될 것이다 :

item_class 
(id   INT UNSIGNED PRIMARY KEY 
, item_id  INT UNSIGNED NOT NULL COMMENT 'FK ref item.id' 
, used_by_class VARCHAR(20) NOT NULL 

우리는 가능성이 (item_id, used_by_class) 튜플에 고유 제한 조건을 추가 할 것입니다. InnoDB를 사용하면 항목 테이블을 참조하는 FOREIGN KEY 제약 조건을 생성합니다.

item 
id name 
--- ----- 
11 Cake 

item_class 
id item_id used_by_class 
--- ------- ------------- 
412  11 Scout 
413  11 Spy 
414  11 Pyro 
415  11 Demoman 
1

데이터 저장시 해당 데이터를 직렬화 할 수 있다고 생각합니다. 레코드를 가져올 때 모든 레코드를 비 직렬화 할 수 있습니다.

item 
id name used_by_class 
--- ----- --------------- 
11 Cake {scout:Spy:pyro} 

유사한이