2011-11-10 5 views
0

다음 표가있는 경우 (괄호 안에 PK가있는 경우) ...데이터베이스에 일대 다 관계를 올바르게 작성하려면 어떻게해야합니까?

Store { [StoreCode], PhoneNumber, Address, ...}

StoreHours { [id], DayofWeek, Open, Close, ClosedDate }

이제 내 생각에는 모든 상점에서 같은 시간 &를 사용하지 않을 것입니다. "OpenTimeA, OpenTimeB, OpenTimeC, CloseTimeA, CloseTimeB, ..."과 같이 Store 테이블에 여러 개의 열을 만드는 대신 관계 테이블을 만들 수 있습니다. 그러나, 나는 그 (것)들을하기에 익숙하지 않고, 처음으로 그것을 바로 얻고 싶다. 여기 내가 위의 테이블에 추가하는 생각은 ...

Has_a { [StoreCode, id ] }

내 질문은 내가 이런 식으로 할 경우 ...

  1. 더 좋은 방법은 무엇입니까? 테이블을 Has_a보다 더 크게 만들거나 이름을 지정하여 상점에 대한 여러 유형의 관계에 사용할 수 있습니다. 예를 들어 다른 테이블 Managers를 추가하고 Has_a 테이블에 관리자 ID를위한 열을 추가하십시오.

    like ...

StoreInformation { [StoreCode], TimeId, ManagerId, ...}

답변

2

는 하나 개의 가능한 솔루션 (표준 1 대 다수의 관계)이다 당신은 같은 시간에 열리고 닫히는 많은 상점을 가지고 있으며, 모든 요일에는 Schedule 테이블을 추가 할 수 있으므로 여러 상점이 동일한 일정을 공유 할 수 있습니다.

Store 
    StoreCode 
    ScheduleId 
    PhoneNumber 
    Address 
    ... 
    PRIMARY KEY (StoreCode) 
    FOREIGN KEY (ScheduleId) 
    REFERENCES Schedule(ScheduleId) 

Schedule 
    ScheduleId 
    ScheduleTitle 
    PRIMARY KEY (ScheduleId) 

ScheduleHours 
    ScheduleId 
    DayOfWeek 
    OpenTime 
    CloseTime 
    PRIMARY KEY (ScheduleId, DayOfWeek) 
    FOREIGN KEY (ScheduleId) 
    REFERENCES Schedule(ScheduleId) 
+0

내가이 작업을 수행하더라도 상점 코드 외에 정확하게 동일한 여러 레코드가있을 확률은 얼마입니까? – daveomcd

+1

UNIQUE 제약 조건이기도 한'PRIMARY KEY' 제약 조건 때문에 여러 개의 동일한 레코드를 가질 수 없습니다. –

+0

Doh! 고마워 하지마! 그리고 닫힌 날짜를 변형 시키려면 다른 테이블'StoreClosed {[SchoolCode, Closed (Date)]}'를 만들 수있을 것 같네요 ... – daveomcd

2

관계의 이러한 종류를 추적하기위한 일반적인 Has_a 테이블을 만드는 가장 큰 문제는 단 하나의 소스 테이블을 관련시킬 수 있기 때문에 당신이 당신의 테이블 사이에 외래 키 관계를 사용할 수 없습니다 사실이다 단일 대상 테이블로. 그 외에도 키에 대한 GUID를 사용하지 않으면 특정 키가 속한 테이블을 알 수 없으므로 가짜 결과를 얻게 될 수 있습니다.

또한 일대 다 관계의 경우이 종류의 중간 테이블은 필요하지 않습니다. 적절한 외래 키를 사용하여 StoreCode 열을 StoreHours 테이블에 추가 할 수 있습니다. 중간 테이블이 필요한 유일한 경우는 다 대다 관계입니다.이 경우에는 여러 개의 상점이 동일한 StoreHours 레코드를 공유하지 않는 한 필요하지 않을 수 있습니다.

+0

답변 해 주셔서 감사합니다! – daveomcd

관련 문제