2011-11-02 6 views
3

저는 대상 학교에 대해서만 데이터베이스 디자인을 만들고 있습니다. 나의 현재 디자인은 다음 링크에서 보여됩니다 : 나는 세 가지 요소를 동봉 한다른 테이블의 데이터를 사용하여 계산 된 필드 만들기

Database design http://img225.imageshack.us/img225/7711/capturecopyy.png

다음 계산 포함 모든 필드 :

  • StudetExams :
  • StudentExamObjectives 평균 : 공인 및 점수
  • 객관적인 평가 : FinalScore

하지만 다른 테이블과 상호 작용해야합니다. 예를 들어, StudentExamObjectives는 점수 필드를 사용합니다. 여기서 Answers 테이블에서 올바른 모든 문제에 대한 평균이 있으며 점수 값이 0.70보다 크거나 같으면 공인 된 1입니다.

내 디자인이 잘못되었거나 그 값을 얻으려면 트릭을해야하는지 잘 모르겠습니다.

미리 감사드립니다.

답변

1

발생하는 문제는 정규화 부족 때문입니다. 다른 테이블의 열 값에 대한 함수가 필요할 때마다 테이블의 열에 저장하지 않아야합니다.이 정보가 필요한 쿼리의 일부로 필요시 계산해야합니다. 하나 또는 여러 개의 열이있는 테이블을 반환하는 인라인 테이블 반환 함수 (TVF)를 사용하여이 작업을 단순화 할 수 있습니다.

그렇지 않으면 삽입 중에 결과를 계산하고 저장해야합니다. 따라서 값이 계산되는 열이나 행이 제거되면 데이터 중복 및 데이터의 일관성없는보기가 발생할 수 있습니다.

이러한 중복성이 비정규 화를 통해 추가되는 경우가 있지만 최악의 경우에만 수행해야합니다. 실제 시나리오로 데이터베이스를 프로파일 링하면이 방향으로 나아갈 때입니다. 이 경로를 사용하는 경우 트랜잭션 작업 후 데이터베이스에 무결성이 있는지 확인하는 단계를 추가해야합니다. 값 이상 또는 0.70 이상 동일 점수 경우

0

StudentExamObjectives 답변 테이블의 올바른 모든 문제에 대한 평균 점수 인 필드를 사용하고 1인가이다.

이렇게 계산 된 열을 만들 수 있다고 생각하지 않습니다. CASE 성명과 함께보기를 사용할 수 있습니까? 이런 식으로 뭔가를 (대략) :

CASE WHEN Score >= 0.70 
    THEN 1 
    ELSE 0 
END AS IsAccredited 

Score의 값은 그 자체가 모든 시험 점수의 평균을 집계 한 결과 일 수도있다. 현재 어떤 필드가 현재 존재하고 어떤 개념적인지는 모델에서 알기가 어렵습니다.

관련 문제