2012-02-29 2 views
0

이것은 매우 탐색적인 질문입니다. 우리가 대학을위한 데이터베이스를 설계한다고 가정 해보십시오. 이 곳은 기본적인 교육 시간 단위로서 학기를 가지고 있습니다. 1 년에 2 학기가 있고 여름에는 절반 학기가 있습니다. 그것들을 설명하는 방법으로 용어를 사용합니다. 특정 시점의 용어 (예 : 가을 2012 또는 2013 년 봄 또는 여름 2013)에 정수를 지정하려면 가장 좋은 복합 정수는 무엇입니까?데이터베이스의 열 값을 정의하는 가장 좋은 방법

예를 들어, 2012 년 봄 2012의 경우 마지막 숫자는 용어입니까?

감사합니다.

답변

1

음,이 질문에 database-design이라는 태그를 붙였습니다. 두 값에 정수를 할당해야한다고 주장해야합니다. Year와 Season. 다분 할 필드가있는 경우 First Normal Form에 표를 사용할 수 없습니다.

이러한 필드 중 하나에 대한 쿼리를 실행하면 문제가 발생합니다. '몇 년이 지났습니까?'와 같은 간단한 질문에 쉽게 대답 할 수 없습니다. 데이터를 파싱하지 않아도됩니다. 그래서 내 충고는 당신이 말하는 정수를 필드 YearSeason으로 나누는 것이 좋습니다. 당신이 두 값을 저장하는 정수를 사용하여 주장하는 경우

이제 ... 다음 솔루션은 완벽한 것 같다 :)

+0

이 용어를 비정규 화하는 주된 이유는 "2006 년 여름 이후이 교수가 가르친 과정을 나에게 알려줘"와 같은 간단한 쿼리 때문입니다. 이 용어는 정수이므로 수학을 통해 결과를 얻을 수 있습니다. – sunbomb

+0

정규화 된 테이블에서도 동일한 작업을 수행 할 수 있지만 더 많은 유연성이 있습니다. 비정규 화 된 솔루션으로 무엇을 하든지 간단하게 처리 할 수 ​​있습니다. 필요하지 않을 때 왜 "수학을 실시합니까"? 그게 불필요한 처리이고 피해야 만합니까? –

+0

@ sunbomb : "2006 년 여름 이후"는 단순한'WHERE (yearColumn, semesterColumn)> = (2006, 2)' –

0

이 귀하의 상황에 100 %를 적용,하지만 난이 작동 확실하지 대학에 입학하고 이미이 문제에 부딪 혔습니다. 가을 학기가 시작되면 가을, 봄, 여름은 자연스럽게 시간순으로 정렬되고 오름차순으로 정렬되기 때문에 알파벳 순서대로 진행됩니다. 정렬 가능한 합성물이 필요하면 연과 학기를 연결하는 계산 된 필드를 사용합니다. , 당신이 정말로 번호가 필요한 경우

YearSemester: 
------------- 
YearSemesterID (PK and autonumbering) 
Year 
Semester 
YearSemester (formula Year + Semester, possibly indexed if your DB supports that) 

는, 당신은 YearSemester 필드의 제거 얻을 수있는 시퀀스 필드를 추가하고, 할 것 트리거를 설정 :

내가 좋을 것 것입니다 Year + Semester concatenation을 선택하고 각 insert/update/delete에 따라 순서 번호를 할당하십시오.

관련 문제