2012-08-09 2 views
-1

다른 웹 사이트에있는 부동산 프로젝트가 있습니다.유형에 기초한 세분성을위한 DB 테이블 디자인 구조

프로젝트는 다음과 같이 구분됩니다.

 
affordable 
budget segment 
Luxurious 
affordable & budget segment 
budget segment & Luxurious 
affordable,budget segment & Luxurious. 

위의 분류를 사용하여 프로젝트 설명 페이지의 유사한 프로젝트 탭에 채 웁니다. 예

PROJECTA 때문에 유사 프로젝트 탭에서 ProjectC, ProjectE, ProjectF을 볼 수 PROJECTA 사람들을위한 프로젝트 설명 페이지에서 지금
 
ProjectName   Class 
ProjectA   Affordable 
ProjectB   Budget Segment 
ProjectC   Affordable & Budget Segment 
ProjectD   Budget Segment    
ProjectE   Affordable 
ProjectF   Affordable, Budget Segment & Luxurious 

를 들어

는 저렴한 가격과 ProjectC는 ProjectE는 ProjectF는 저렴한 세그먼트에서 주택을 포함한다.

나에게 단 하나의 열 테이블 제안 위의 구조 비슷한 프로젝트를 얻기위한 요구 사항 및 쿼리.

당신은

+0

솔루션 단일 열 테이블 구조가 문제를 제한하지 않습니다. 이 문제는 1 개의 많은 관계로 가장 잘 해결됩니다. 그렇지 않으면 총 해킹으로 끝납니다. –

+0

이것이 숙제가 아니라면 왜 단일 열 테이블 구조에 대한 응답을 제한합니까? 숙제 인 경우 왜 태그를 지정하지 않은 것입니까? – Recurse

답변

0

당신이 1 대 다수의 관계를 사용해야 위의 의견에 동의 해 주셔서 감사합니다. 당신 해야는 그것을 다음과 같은 하나의 열이있는 경우 :

는 이들 각각에 int 값을 할당하고 다른 조합을 검색 할 수 및 비트 AND (&)를 저장하는 숫자 + 사용합니다.

Affordable = 1 
Budget Segment = 2 
Luxurious = 4   # Note: it's Four, not Three. 

알림 : 4+2+1=7. proj_description 테이블에 proj_val으로 저장하십시오. 프로젝트 목록에이 값을 넣는

:

ProjectName  Class       int val 
-----------  -----       ------- 
ProjectA   Affordable        1 
ProjectB   Budget Segment       2 
ProjectC   Affordable & Budget Segment  1+2=3 
ProjectD (=ProjB) Budget Segment       2 
ProjectE (=ProjA) Affordable        1 
ProjectF   Affordable, Budget & Luxurious 1+2+4=7 
no Proj ?   Luxurious        4 
........   Affordable + Luxurious    1+4=5 
........   Budget + Luxurious     2+4=6 

이 프로젝트 A에 대한 유사를 얻을하려면, 수행

SELECT * FROM `proj_description` WHERE `proj_val` & 1 != 0 

1은 위의 표에 따라 계산됩니다. 따라서 Proj C (proj_val=3)는 결과로 Proj F를 부여합니다. 3 & 7 = 3은 0이 아닙니다.