2011-02-10 6 views
1

/MySQL의 관계 테이블 조언 : 나는 콘텐츠 형식 "portfolio_item을"존재하는 CodeIgniter의에서 사이트를 짓고 있어요PHP 나는 다음에 몇 가지 조언을 얻을 수 있다면 난 그냥 궁금 해서요

. 동일한 포트폴리오 항목이 확인란 컨트롤을 통해 3 개 장소에 표시 될 수 있습니다 : 홈페이지, 회원 페이지 및 고객 페이지.

나는이 관계를 데이터베이스에 구현하는 가장 좋은 방법이 무엇인지 궁금 할뿐입니다. 위의 시나리오 각각에 대해 3 가지 관계 테이블을 가질 수는 있지만 나에게 이는 과도한 것 같습니다 (사이트가 아주 작음).

나는 다음과 같은 필드가 하나 개의 관계 테이블을 사용하는 생각을했다 :

type (homepage, client or member) 
show_on_id 
portfolio_id 
유형 필드의 목적은 (중 클라이언트 또는 회원)에서 "show_on_id"를 검색 할 테이블 결정하는 것입니다

, 경우 유형이 홈페이지 인 경우 show_on_id는 필요하지 않습니다.

이렇게하는 것이 단점이 있습니까?

답변

3

예, 약간의 단점이 있습니다. 동일한 설정에 대해 여러 행으로 끝날 수도 있고, 서로가 모순 될 수 있습니다. 따라서이 테이블에 행을 삽입하는 방법은 매우 중요합니다. 자신의 포트폴리오에 사용자를 연결

CREATE TABLE `portfolio` 
(`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`content` TEXT NULL, 
`showHome` BOOLEAN NULL, 
`showClient` BOOLEAN NULL, 
`showMember` BOOLEAN NULL) 

그리고 테이블, 당신이 경우

CREATE TABLE `portfolio_user` 
(`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`portfolio` INT NOT NULL, 
`user` INT NOT NULL) 

: 당신이 더 이상 섹션을 추가하지 않을 경우

뿐만 아니라 포트폴리오 테이블이있을 수 있습니다 나중에 포트폴리오를 표시 할 수있는 장소를 더 추가하거나 이러한 장소가 동적 인 경우 메소드가 작동합니다. 나는 '유형'을 이해하기 쉽도록 '장소'로 변경하고, ENUM 또는 다른 테이블을 사용하여 포트폴리오를 표시 할 수있는 장소를 정의합니다.

0

각 위치마다 하나 이상의 포트폴리오 항목이있을 수 있습니까?

많은 경우 직접 외부 키 필드를 사용하여 포트폴리오에 연결하는 경우 링크 테이블을 사용하십시오.

정확히 같은 디자인의 개인적인 경험과 나중에 나타날 수있는 문제를 기반으로 한 세 가지 링크 테이블을 사용하지 말라고 충고합니다.

관련 문제