2009-09-09 4 views
0

참조는옵션 데이터베이스 엔티티 (2 부)


참고 이하 '거의 결심'이 연속 및 Optional Database Entities의 단순화이다.

저는 다양한 샘플 유형에 대한 다양한 테스트를 테스트하는 새로운 실험실 데이터베이스를 설계하고 있습니다.

홈페이지 엔티티 :
    각 (REQ 제외) 정확히 하나의 부모와 (MEA 제외) 적어도 하나의 자녀가 있어야합니다.

 
Request  REQ - the form 
Sample  SAM - the materials on the form to be tested 
Test   TST - the procedures to be performed on the sample 
(Trial **  TRI - instance of duplicate methods for statistics) 
Measurement MEA - a single measured number 
** A Trial is optional. (see below) 

옵션 평가판 설명
많은 테스트는 몇 가지 측정과 간단한 절차입니다. 예를 들어, "샘플에 KNO3 10 mL 15 %를 넣고 밀도와 pH를 얻으십시오."

그러나 일부 테스트에서는 동일한 절차가 샘플의 고유 한 부분에 대해 수행되어야한다고 요구합니다. 탄도 테스트를 예로 들어 보겠습니다. 요청자는 20 개의 총알에 대한 평균 이탈 속도와 정확도를 요구할 수 있습니다. sample은 총알 20 세트입니다. test은 "출구 속도와 정확도를 수집합니다." trials은 해고되는 20 개의 개별 사진입니다. measurements은 각 샷의 이탈 속도와 정확도입니다 (trial).

질문
가 어떻게 TestTrial, 그리고 MeasurementTrial 개체는 선택 사항이며, 이후 엔티티를 모델링해야합니까?

옵션 1 : 필요없는 경우 "공백"평가 엔티티를 자리 표시 자로 사용하십시오.
양호 : 상위 항목은 항상 동일합니다.
불량 : Trial 불필요한 경우에도 항목이 존재합니다.

옵션 2 : 하위 시험과 Test 테이블에Trial. 측정 값은 항상 test을 부모로 사용합니다.
좋은 : Test에 대한 여러 부모 타입 : 측정 (Test)
나쁜위한 단일 부모 타입 Sample 또는 Test

옵션 3 : 측정 단위는 여전히 하나의 부모를 가지고 있지만, 부모는 test 수 중 수 또는 trial.
좋은 : Test에 대한 단일 부모 유형 (및 Event 필수)
나쁜 : 여러 부모 타입 Measurement에 대한 : Test 또는 Trial

옵션 4 : 하위 개체로 시험.Measurementtest_id이고 선택 사항은 trial_num입니다. 재판의 PK는 (test_id, trial_num)입니다.
양호 : 다중 상위 유형 없음.
나쁜 :

옵션 X 확실하지 : 다른 옵션은 없습니다 이미 언급했다.



은 거의 결정했다 : 내가 지금 옵션 4 (하위 항목으로 시험)이 최고입니다 믿습니다. 다음은 옵션 4의 기본 규칙입니다. - measurement은 항상 test에 속합니다. - trial은 필요할 때만 존재합니다. - Trial_num은 세트에 여러 개의 시험이있는 경우 설정됩니다. - 그렇지 않으면 trial이 필요하지 않음을 나타 내기 위해 trial_num은 null입니다.

Simple ER Diagram 
----------------- 
REQ <- SAM <- TST <- MEA 
      ^  | 
       |  | 
       |-(TRI)<-|  

Table Keys 
---------- 

Table | PK    | FK 
------+-----------------+---------------- 
REQ | REQ_id   | 
SAM | SAM_id   | REQ.PK 
TST | TST_id   | SAM.PK 
(TRI | TST_id, TRI_num | TST.PK) 
MEA | MEA_id   | TST.PK, TRI.PK* 

* TRI.PK is null if trial entity is not needed. 

왜 좋은지 나쁜지에 대한 의견을 보내주십시오. 나는 당신의 설명에서 무엇을 수집 할 수 있습니다에서

+0

이것은 단순화 되었습니까? –

+0

'Trial'에 대해 좀 더 설명해 주시겠습니까? '시험'과 '측정'이 서로 다른 '시험'과 다른 점은 무엇입니까? –

+0

couchdb와 같은 비 관계형 데이터베이스를 사용 해본 적이 있습니까? – David

답변

1

Trial을 별개의 개체로 나타내는 것이 왜 필요한지 명확하지 않습니다. 다음 스키마가 적절한 이유는 무엇입니까? 지금까지 말한 것을 그냥 추론 할 수처럼

Sample  Test   Measurement 
------  ----   ----------- 
SampleId (PK) TestId (PK) MeasurementId (PK) 
Description SampleId (FK) TestId (FK) 
       TestStartDate Description 
       TestEndDate MeasuredValue 

가에서, 소리하는 Trial으로 하나 이상의 Measurement 카운트와 Test.

if (test.Measurements.Count > 1) { 
    _View.Title = test.TestName + " (Trial)"; 
} 

사실이 아니라면이 스키마가없는 것을 당신은 무엇을해야합니까 속성 : 바로 다음 작업을 수행 할 수 있다면 사용자 인터페이스는 특정 시험이 시험을 한 것으로 보여 할 필요가있는 경우 즉,? 여기에없는 Trial 테이블에 있어야 할 것은 무엇입니까?


업데이트 : 추가 세부 사항 주어, 나는 내가 TestRun 전화 할게 새로운 법인을 도입 추천 할 것입니다. A TestRunTest 내에 하나 이상의 Measurements을 그룹화하기 만합니다.Trials이 (가) TestRuns과 연결되었습니다.

결과 스키마는 다음과 같습니다

Sample  Test   TestRun   Measurement 
------  ----   -------   ----------- 
SampleId (PK) TestId (PK) TestRunId (PK) MeasurementId (PK) 
Description SampleId (FK) TestId (FK)  TestRunId (FK) 
       TestStartDate     Description 
       TestEndDate     MeasuredValue 

Trial 
----- 
TrialId (PK) 
TestRunId (FK) 
Description 

이 원래의 질문에 옵션 1에 매우 가깝습니다. 공백 (또는 더미) 인 Trial을 유지 관리하는 비용이 낮 으면 (예 : Trials에 속성이 거의 없거나 아예없는 경우) 더 나은 솔루션 일 수 있습니다.

+0

일련의 측정을 여러 번 수행하는 테스트에서 평가판은 이러한 측정의 단일 세트입니다. 예 : 1 시간 동안 5 분마다 온도와 압력을 기록하고, 발사시 30 개의 탄환의 속도와 정확도를 기록하십시오. 반면에 간단한 테스트 (원래 질문에서 설명한대로)는 여러 번의 측정이 있지만 여러 번의 시도가 필요하지 않습니다. – Steven

+0

어떤면에서 '시험'은 특정 측정 집합의 배열 구성원입니다. 대부분의 경우, '사양'은 개별 '측정'보다는 특정 '측정'의 평균 (또는 다른 기능)과 비교되어야합니다. – Steven

1

,이는 말할 수있다 :

테스트가 하나 또는 여러 시험 그것에 assocaited과 시험은 가 하나 개의 테스트와 관련 될 수있을 수 있습니다.

이 경우, 평가판은 테스트의 하위 엔티티입니다. 다시 (관계를 의미) 테스트 테이블에 외래 키 필드 것

테스트

재판 테이블
시험 : 그것이 사실 인 경우에, 당신은 두 개의 테이블을 가질 수 있습니다. 그렇게하면 각 평가판은 정확히 하나의 테스트와 관련되며 각 테스트에는 여러 개의 관련 평가판이있을 수 있습니다.

+0

측정은 하나 이상의 테스트 또는 평가판에 속할 수 있습니까? –

+0

아니요. 요청을 제외한 모든 엔티티에는 정확히 하나의 상위 항목이 있고 측정 항목은 제외하고 하위 항목이 하나 이상 있습니다. – Steven

+0

그런 다음 Microsoft Project에서 Microsoft에서 사용하는 트릭을 사용할 수 있습니다. 측정 테이블에는 관계를 식별하는 두 개의 필드가 있습니다. 하나는 parentId이고 parentTypeId가됩니다. parentId는 부모 요소의 ID이고 parentTypeId는 부모가 Test 또는 Trial (또는 필요한 다른 유형)인지 여부를 나타내는 식별자입니다. –

0

다음은 가정과 해석으로 높이 쌓인 연입니다.

에는 sample이 있으며 샘플에서 수행해야 할 절차가 명시되어 있습니다. sample이 단수 (액체 한 병) 인 경우 시험이며 한 세트의 측정 값이 수집됩니다. sample이 여러 개인 경우 (탄환 상자, 시계열) 시험이고 반복되는 측정 세트가 sample 인스턴스 당 하나씩 수집됩니다.

즉, 시험/시험 이분법은 빨간 청어이고 measurementtestsample 사이의 교차 테이블입니다.

REQUEST 
------- 
RequestId (PK) 
Specification 

SAMPLE 
------ 
RequestId (FK) 
SampleId (PK) 

TEST 
---- 
RequestId (FK) 
TestId (PK) 
TestStartDate 
TestEndDate 

MEASUREMENT 
----------- 
TestId (FK) 
SampleId (FK) 
MeasurementDescription 
MeasuredValue 

Measurement(TestId,SampleId)은 복합 고유 키입니다. 복합체에 대한 느낌에 따라 대리모를 정의 할 수도 있습니다. MeasurementId (PK)

분명히 더 정규화가 필요할 수 있습니다. 예를 들어, 샘플을 두 개의 테이블 samplesample_instance으로 분할해야 할 수도 있습니다. 관련된 모든 속성을 알지 못해도 알기가 어렵습니다.

관련 문제