2016-06-12 2 views
0

접합 테이블을 통해 이미지 테이블과 다 - 대 - 다 관계가있는 프로젝트 테이블이 있습니다. 또한 프로젝트에 여러 표지 이미지를 추가하려고합니다.하나의 표에서 여러 행을 그룹화 하시겠습니까?

이미지 테이블의 일부 행을 그룹화하려는 여러 테이블이 있습니다. 표지 이미지 인 경우 부울 값이있는 열을 추가해야합니까? 아니면 표지로 원하는 이미지의 ID를 사용하여 일대 다수 테이블을 만들어야합니까? 그리고 일부 열을 추가하면 대부분의 열 값이 null이면 중복되지 않습니까?

이미지 테이블에서 이미지를 선택하지만 sortorder와 같은 추가 열을 추가하려는 클라이언트 테이블과 규율 테이블도 있습니다.

답변

0

두 기술 모두 장점이 있으며 대답은 의견을 기반으로 할 수 있습니다. 내 것이. 이미지가 기본 이미지인지 아닌지를 나타내는 이미지 테이블에 필드 (예 : cover)를 추가하는 것이 좋습니다. 대부분의 행이 cover 필드에 NULL 값을 가지고 있어도 괜찮습니다. imageid 및 표지에 색인을 작성하십시오.

표지 이미지 만 필요로하는 응용 프로그램이이보기를 직접 사용할 수 있도록 select ... from images where cover=true 인 CoverImages라는보기를 만드는 것도 좋습니다. 데이터베이스 엔진에 따라 스파 스 열을 만들고 필터링 된 인덱스를 만들 수 있습니다.

또 다른 옵션은 projectid 및 imageid가있는 junction 테이블에 cover을 추가하는 것입니다. 그러나 cover은 프로젝트가 아닌 이미지의 속성이므로 데이터베이스 정상화의 두 번째 정규 형식을 위반하게됩니다.

커버 이미지 인 이미지를 일대 다 테이블에 넣는 옵션은 더 많은 플래그가 추가 될 때 문제가 될 수 있습니다. 이미지에 민감한 플래그가 지정되어 있으면 다른 테이블을 만들어 중요한 이미지 ID 만 그 안에 넣어야합니다.

마지막 2 가지 생각을 바탕으로 이미지 테이블에 cover 플래그를 넣는 것이 좋습니다.

편집

영업 이익은 imageid 1 커버 프로젝트 1에 대한하지만 프로젝트 2에 대한이 될 수 있음을 상기시켰다. 이는 cover이 이미지 테이블이 아닌 접합 테이블과 연관되어야 함을 의미합니다. 2NF는 위반되지 않습니다

+0

그러나 이미지에는 여러 개의 프로젝트가있을 수 있으므로 연결 테이블에 커버 열을 추가하여 작동시켜야합니다. – Disheart

+0

오오 그렇습니다, 당신은 절대적으로 옳습니다, 당신은 당신의 질문에 그것을 언급했습니다; 대답을 쓸 때 잊어 버린 것을 사과드립니다. 이 경우, 그 속성은 프로젝트와 이미지와 연관되어 있기 때문에 접합 테이블에'cover'를 추가하면됩니다. 그리고 두 번째 정규형을 위반하지 않을 것입니다. 좋은 지적. – zedfoxus

관련 문제