2012-05-13 2 views
1

DB 디자인 측면에서 더 잘 수행 할 수 있다면 운동을하려고합니다. 왜 잘못 되었든 옳은지에 대한 조언을 주시면 감사하겠습니다. 이미지 테이블 용 데이터베이스 디자인

나는 3 표
Person 
Car 
Image 

이 모두 자동차와 사람은 이미지에 대한 모든 참조 이미지 테이블에 저장되어있는 이미지를 가질 수 있습니다.

Person has > Images 
Car has > Images 

는 이미지 테이블은 ..이처럼 보이는 지금 내 테이블에 NULL을 많이 가지고 보인다

Image 
ID NAME CAR_ID PERSON_ ID 
1 img1 10  NULL 
2 img2 NUll  8 

끝,하지만 난 이미지가 자동차 나에 대한 경우 알 필요가 사람.

그럼 어떻게하면 더 잘할 수 있습니까?

+0

예 자동차와 사람 모두 여러 이미지를 가질 수 있습니다. 카테고리 테이블을 추가하면 가장 좋을까요? 나는 고양이 차나 차 사람으로 분류 할 수 있니? 이게 더 잘 될까요? – Prometheus

+1

범주 테이블을 사용하면 시스템을 더욱 확장 가능하게 만들 것입니다. 이미지에 더 많은 테이블을 연결할 수 있습니까? 즉, Person과 Car뿐만 아니라 MotorCycle과 연결됩니다. 하지만 어쩌면 당신은 아래의 chris의 대답을 고려하기를 원할 것입니다 - 카테고리 테이블을 모두 가지고있는 것을 피하십시오. –

답변

3

일대일 관계가있는 경우 Car 및 Person 테이블의 이미지에 대한 참조를 저장하면 더 적은 Null로 끝납니다. 이미지가 여러 개인 경우 관계를 저장하는 테이블을 사용하는 것이 가장 좋습니다.

이 테이블은 다음과 같을 것이다 :

DATATYPE DATAID IMAGEID 
1   10   1 
2   8   2 

를 첫 번째 열에서, 1 차 및 2로 지칭 된 이미지를 의미한다.

+0

이것은 카테고리 테이블과 같을까요? – Prometheus

+0

예. DataType 열에는 카테고리 테이블의 항목 인덱스가 포함될 수 있습니다. 위에서 언급 한 테이블은 카테고리, 자동차, 사람 및 이미지 테이블 간의 관계를 캡처하는 관계 테이블입니다. –

0

필요하지 않음 이미지 테이블의 두 필드가 필요합니다. person 및 car 테이블을 쿼리하여 이미지 ID와 일치하는 항목이 있는지 확인할 수 있습니다.

그러나 그 존재가 편리하고 효율적임을 알 수 있습니다.

+0

http://boulter.com/blog/2004/08/19/performant-is-not-a-word/ – carlpett

+0

@carlpett, heh interesting :). 그러나 단어가 공식적인 것이지 상관하지 않습니다. – goat

+0

;) "정말로 존재하지"는 단어가 얼마나 자주 나오는 지 흥미 롭습니다. – carlpett

관련 문제