2014-07-11 7 views
1

내 데이터베이스는 회사 웹 사이트에 대한 설명입니다. 회사 웹 사이트에는 URL,로드 시간 등 여러 속성이 있습니다. 각 웹 사이트는 하나 이상의 국가를 타겟팅합니다. 웹 사이트와 국가의 관계를 표현하는 데 문제가 있습니다.관계형 데이터베이스에서 배열을 피하는 방법은 무엇입니까?

내 설정 번호 (1)은 다음과 같습니다 : 필드

  • 웹 사이트 테이블, WebsiteId

    • 회사 테이블
    • 국가 테이블, 회사 ID는, 나라 (배열 (Company.id을 말한다) 등 Country.id) 및 URL 등의 여러 가지 속성를, loadTime, 참조

    내 설정 번호 2는 다음과 같습니다

    • A 회사 소개 테이블
    • 국가 테이블 필드 WebsiteId와
    • 웹 사이트 테이블, 회사 ID는 (Company.id을 의미) 등 URL,를, loadTime,
    • WebsiteCountries 테이블과 같은 몇 가지 속성을 가진 필드 WebsiteId, CountryId

    나는 두 가지 접근 방식에 문제가있다는 :

    • 설정 번호 (1)는 공동의 배열을 사용하여 untry.id, 유지하기 어렵게 됨
    • 설치 번호 1에서 CompanyId는 웹 사이트 테이블에 고유 한 제한 조건을 갖지만 설치 번호 2에서 중복을 허용합니다.보다 일반적으로 CompanyId + Countries는 설정에서 후보 키 역할을 할 수 있습니다 1. 이것은 나에게 약간의 방해가된다. 내가 틀렸고 최선의 접근법인가?
  • +5

    "설정 번호 2"가 맞습니다. 단지 'WebsiteId' ** 및 **'CountryId'에 고유 한 제약이 있습니다. 이것은 기본 키일 수 있습니다. – Jodrell

    +0

    루크 인 PostgreSQL을 사용하십시오. – Miraage

    답변

    2

    @ Jodrell이 올바른 답을 이미주었습니다. 화합물 PK로 "설정 번호 2"가 가장 좋은 해결책입니다. 나는 그것을 단지 세부적으로 설명 할 것이다.

    회사, 국가 및 웹 사이트가 있습니다. 각각에 대해 별도의 테이블을 만듭니다.

    가 지금은 참조를위한 시간이다 : 기업은 단지 1 개의 웹 사이트가있을 수 있습니다 경우

    • , 그것은 일대일 관계입니다. 웹 사이트가 많으면 일대 다의 관계입니다. 두 경우 모두 웹 사이트 테이블에 외래 키인 CompanyId가 있습니다. 이는 UNIQUE 제약 조건에서만 달라집니다.

    • "각 웹 사이트는 하나 이상의 국가를 타겟팅합니다."라고 쓰십시오. 또한 모든 국가에 대해 하나 이상의 웹 사이트가있을 수 있습니다 (다른 회사의 경우). 그것은 고전적인 다 - 대 - 다 관계라는 것을 의미합니다. 이 경우 junction 테이블 - WebsiteCountries를 추가해야합니다. 여기에는 (WebsiteId, CountryId) 두 개의 열을 구성하는 복합 기본 키가 있습니다. 이렇게하면 중복을 막을 수 있습니다.

    희망이 있습니다.