2011-03-09 4 views
2

다섯 개의 섹션으로 구성된 온라인 신청서를 작성 중입니다. 각 섹션에는 고유 한 테이블이 있습니다. SECTION1, SECTION2 등의 섹션을 호출 해 봅시다. APPLICATIONS라는 메인 테이블이 있습니다. 해당 테이블의 첫 번째 열은 ApplicationID입니다."RecordID"를 열 이름으로 사용해야합니까?

슈퍼 빠른 서버에는 수천 개의 레코드 만 있으므로 테이블과 관계의 가독성에 초점을 맞추고, 내가 정상이 될 때까지 비정상 화하면 저장할 수있는 처리 능력의 양이 아닙니다. 고약한.

다음은 어떻게 테이블의 이름을 지정하고 구조화해야하는지 생각합니다. 이것이 가장 읽기 쉬운 방법인지 확인할 수 있습니까? 과거에는 이것을 효과적으로했습니다. 그러나, 나는 약간의 개선이나 통합 할 아이디어가 있는지 알고 싶다. 1-10의 척도로 테이블/열 이름 지정 방법이 얼마나 견고합니까?

APPLICATIONS - TABLE 
ApplicationID - pk 

SECTION1 - TABLE 
RecordID- int - pk 
ApplicationID - fk 
Answer1 - text 
Answer2 - text 

SECTION2 - TABLE 
RecordID- int - pk 
ApplicationID - fk 
Answer1 - text 
Answer2 - text 
+0

정규화는 단순히 성능에 관한 것이 아니라 유지 관리 가능성에 관한 것입니다. 이 설계도 (정직하게도 설계라고 할 수는 없다)는 유지 보수를 위해 끔찍한 일이다. 왜냐하면 누군가가 seciotn을 변경하려고 할 때마다 열을 추가해야하기 때문이다. 정규화를 배우십시오. 그러면 그렇게하는 것이 어렵지 않을 것입니다. – HLGEM

+0

정규화를 이해합니다. 나는 또한 그것의 장점과 단점을 이해합니다. 물론, 장점은 중복성이 줄어들고 유지 관리가 더 잘된다는 것입니다.그러나 단점은 개발하는 데 훨씬 오래 걸릴 수 있다는 것입니다. 나는 유일한 코더이며 프로젝트의 매개 변수를 알고있다. 질문과 답변은 향후 10 년 동안 바뀌지 않을 것입니다. 보장. 코드가 실행되면 코드가 잠기 게됩니다. 또한 내 장점은 더 많은 ColdFusion과 적은 SQL입니다. 이것은 거의 데이터가없는 웹 응용 프로그램입니다. –

+0

@HLGEM, 나는 끔찍한 디자인이 끔찍하다는 것에 전적으로 동의합니다. 그러나 2001 년에 구축 한 웹 사이트에서 매우 효과적이었습니다. 해당 사이트는 여전히 운영 중이며 정확하고 신속하게 정보를 저장했으며 2 천만 달러가 넘습니다. 내가 그것을 개발할 때, CEO는 질문과 응답이 절대로 바뀌지 않을 것이라고 내게 확신했다. 그는 옳았다. –

답변

0

나는이 구조로 갈 것입니다 : 당신은 구조를 복제하는

Records - TABLE 
RecordID- int - pk 
SectionID int - fk 
ApplicationID - fk 
Answer1 - text 
Answer2 - text 

Sections - TABLE 
SectionId int - pk 
SectionSequence int 

-이 변경되는 경우 (당신이 열을 추가 할 필요 말), 당신은 여러 테이블로 변경 적용해야합니다. DRY도 데이터베이스에 적용됩니다.

+0

ODE, DRY 기사 링크를 이용해 주셔서 감사합니다. 그것은 좋은 읽을 거리였습니다. –

+0

나는 예제에 만족하지 않아서이 질문을 3 개월 이상 열어 두었다. 나는 질문과 답변을 비평 적으로 검토했다. 최고의 예제 코드를 가진 최고의 솔루션이라고 생각합니다. 당신의 도움을 주셔서 감사합니다!!! –

0

첫 번째 이유는 섹션 1과 섹션 2가 서로 다른 두 개의 테이블로 나타납니다. 추가 열 sectionIDsectionTitle이있는 단일 테이블로 병합 할 수 있습니다.

그러면 테이블에 sectionID이 표시되고 디자인에 따라 RecordID 열을 사용할 필요가 없습니다.

section1 및 section2 테이블을 유지할 구체적인 이유가없는 한 질문에 대한 이해를 바탕으로합니다.

EDIT - @Oded의 답변이 훨씬 구조적입니다.

+0

각 섹션에는 최대 50 개의 질문이 있습니다. 250 열로 된 테이블을 갖고 싶지 않습니다. 그래서 논리적 인 부분으로 나누고 있습니다. –

2

난 항상 내 ID 열 이름을 id라고하고, 접두사가 붙은 테이블 이름은 내가 말하는 이드를 알기에 충분하다.

다른 항목에서는 SECTION 테이블이 똑같은 구조를 갖고있는 것 같습니다. number 열 또는 이와 비슷한 테이블을 하나만 사용하는 이유는 무엇입니까? 코멘트에 응답

:

SECTION 
id - pk 
ApplicationID - fk 
name 

QUESTION 
id - pk 
text 

SECTION_QUESTION 
id - pk 
SectionID - fk 
QuestionID - fk 

ANSWER 
id - pk 
SectionQuestionID - fk 
text 

이 부분 사이에 몇 가지 질문을하더라도, 여러분의 다양한 질문을 만들어 공유 할 수있는이 방법. SECTION_QUESTION 연관 테이블은 질문과 섹션 간의 관계를 매핑합니다. 그런 다음 QUESTION 대신 SECTION_QUESTION에 연결된 ANSWER에 응답을 저장하면이 섹션에서 해당 섹션의 답이 정확히 무엇인지 알 수 있습니다.

제 제안이 분명하기를 바랍니다.

+0

각 섹션에는 최대 50 개의 질문이 있습니다. 250 열로 된 테이블을 갖고 싶지 않습니다. 그래서 논리적 인 부분으로 나누고 있습니다. –

+0

어쩌면 답을 저장하는 또 다른 방법을 생각해보아야합니다. 특정 섹션에서 각 질문에 대해 하나의 열을 추가 할 계획이라면, 이것은 확장 성이없고 엉덩이에 통증이 생기지 않을 것입니다. – krtek

+0

Krtek, 나는 대답을 저장하는 또 다른 방법을 생각하려고합니다. 그렇게하는 방법에 대한 아이디어가 있습니까? –

관련 문제