2012-03-14 2 views
1

나는 그 약속 중에 주어진 진단 검사 (Test 테이블)에 환자 방문 (Visit 테이블)을 합친 테이블 VisitTest을 가지고 있습니다. Test 테이블은 실제 테스트가 들어있는 테이블의 수퍼 클래스 (상위 테이블)입니다. 각 하위 테이블에는 테스트 매개 변수와 결과가 있습니다 (1).부모 - 자식 테이블을 사용하여 조인 테이블을 모델링하는 방법은 무엇입니까?

Test 테이블에 메타 데이터가 포함되어 있습니다. id, name, description, status 등과 같은 열이 여기에 저장됩니다. 자식 테이블 (OOP 용어로 Test 테이블에서 상속) 자체 테스트 필드가 있습니다. 각 테스트 매개 변수는 고유 한 열입니다. 하위 테이블에는 테스트 인스턴스를 나타내는 id 열이 있습니다. 예를 들어 10 개의 테스트가있을 수 있지만 각 테스트에는 100 번 주어 1000 개의 테스트 인스턴스가 있습니다.

어떤 이유로 나는 관계를 모델링하는 방법을 알 수 없습니다. 그게 내가 도움이 필요한 곳이야.

이 작업을 수행하기 위해 다른 조인 테이블이 누락 되었습니까? 방문 번호를 테스트 인스턴스에 연결하는 방법은 무엇입니까? 방문 ID가 주어지면 그 방문 중에 주어진 특정 테스트를 어떻게 찾을 수 있습니까? 상위 테이블과 하위 테이블 간의 관계는 어떻게 모델링합니까?

여기에 3 개의 테이블이 있습니다. TestABC 테이블은 특정 테스트이며 이와 유사한 테스트가 많이 있습니다. 방문 테이블과 관련있는 모든 것이 테스트 연결과 무관합니다.

CREATE TABLE [dbo].[Visit](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [ColumnV1] [nchar](10) NULL, 
CONSTRAINT [PK_Visit] 

    CREATE TABLE [dbo].[Test](
     [Id] [int] IDENTITY(1,1) NOT NULL, 
     [Name] [nvarchar](50) NULL, 
     [Description] [nvarchar](50) NULL, 
    CONSTRAINT [PK_Test] 

    CREATE TABLE [dbo].[TestABC](
     [Id] [int] NOT NULL, 
     [Parameter1] [nvarchar](50) NULL, 
     [Parameter2] [nvarchar](50) NULL, 
    CONSTRAINT [PK_TestABC] 

(1) 키 - 값 쌍과 엔티티 유형 테이블 중에서 선택하는 것에 대한 이전 질문을 삭제했습니다. 나는 KVP에 대한 경험이 적은 보고서 작성 경험과 강력한 유형의 가치에 대한 선호 때문에 KVP 도로를 탐험하는 것을 피하기로 결정했습니다.

+0

'Visit'과'Test'를 결합하는'VisitTest'가 있고 자식 테스트 테이블 ('TestABC', etc ...)의'Id' 칼럼을 PK 'TestABC'의 FK로,'Test'로 ... 당신의 모든 요구 사항을 충족시키지 못합니까? 내가 놓친 게 있니? –

답변

1

방문만으로 특정 테스트가 수행되었거나 수행/생성 된 경우 이 방문한 경우에만 테스트 테이블에 외래 키로 VisitId를 추가하여 부모/소유/정의 바이올 로스트를 나타냅니다 .

유형/하위 유형이 훨씬 까다 롭습니다.

TestABC가 Test의 하위 유형 인 경우 TestABC에서 기본 키는 TestId 여야하며 TestId 테이블의 Test 열의 외래 키 여야합니다. [대리자 기본 키 열에 "ID"를 사용하지 않습니다. 복잡한 조인을 작성할 때 너무 혼란 스럽습니다.]

많은 테스트 하위 유형이있는 것처럼 들립니다. 독점적 인 것처럼 들립니다 (예 : TestABC 테이블의 데이터를 사용한 테스트는 TestXYZ 테이블 또는 다른 하위 유형 테이블의 데이터를 가질 수 없습니다. 테스트의 유형을 판별하려면 각 서브 테이블을 조회하여 어떤 유형의 테스트인지 찾아야합니다. 그렇지만 Test 테이블에 TestType 열을 추가하십시오. 아마도 룩업 테이블뿐만 아니라 외래 키를 사용하여 시스템에 몰래 들어가는 테스트 유형을 보장하는 것이 가장 좋습니다 (TestType).

주어진 테스트에 대해 여러 하위 유형 테이블에 데이터가 입력되는 것을 방지하는 방법은 미묘한 문제입니다.각각에 점검 제한 조건을 추가

  • 각 하위 테이블
  • 로는 TestType 열을 추가 정확성 아마도 지나치게 까다로운 것입니다 보장하지만 마음과 가격이 가치와 같은 관계형 무결성의 평화를 고려한다면,이 수행 는 TestType 열이 만, 각각의 하위 테이블의 기본 키 {시험 ID,는 TestType}
  • 를 구축 외부 키를 구축, 그 하위 테스트 테이블에서
  • 에 대한 적절한 코드로 설정 수 있도록 하위 테이블 {TestId, TestType}에 대해 Test (두 개의 열에 있음)
  • Voila, "소유"테스트 항목이 해당 테이블의 TestType으로 설정된 경우에만 하위 유형 테이블에 행을 추가 할 수 있습니다.
+0

이 기사는 데이터베이스에 개체를 매핑하는 데 매우 유용합니다. http://www.agiledata.org/essays/mappingObjects.html#MappingInheritance – bancer

관련 문제