2011-08-30 5 views
0

나는 학습자 관리 시스템을위한 스키마를 설계하고있다.DB 스키마 디자인, 많은 컬럼을 가진 테이블

나는 현재 LearnerDetails 아래 정보 범주를 저장하는 테이블이 있습니다. - 로그인 사용자 계정 정보 - 연락처와 집 주소 - 국적 정보, 영국 등을 유지하기 위해 현재 비자 세부 사항을 포함하여 학습자의 거주 관련 정보 - 학습자의 현재 상태 혜택 관련 정보 - 학습자의 현재 고용 상태에 대한 자세한 내용

내가 가진 문제는이 모든 정보가 단일 테이블에 표시 될 때 열의 수가 70 열을 초과한다는 것입니다.

내가 할 수있는 한 가지 일은 위에서 언급 한 범주를 나타내는 다른 테이블에 정보를 분리하고이 테이블을 부모 테이블 LearnerDetails와 1 : 1 관계로 연결하는 것입니다.

이 방법이 권장 방법인지 여부를 알고 싶습니다. 제 의견으로는 1 : 1 관계가 정상화 된 데이터베이스를 나타냅니다. 그러나 내가 이것을하지 않으면 커다란 수평 테이블을 가지고있을 것입니다. LearnerDetails 테이블.

의견/제안을 알려 주시면 감사하겠습니다.

답변

2

5NF 또는 3NF 이상이면 테이블의 많은 열에 본질적으로 문제가 없습니다.

그러나 수직 분할 (1 :: 1)이 의미가있는 경우가 꽤 많이 있습니다. take a look at a similar question.

1

정규화에 필요한 경우 70 개 이상의 열을 가질 수 있습니다. 어떤 rdbms를 사용하는지는 언급하지 않았지만 대부분 255 개 필드 이상을 지원합니다.

+0

DBMS는 SQL Server 2008입니다. 예, 필요한 열의 양을 지원합니다. 내가 기본적으로 알고 싶었던 것은 이것이 최선의 관행인지 아닌지 여부입니다. 관련 정보 (부모 테이블과 1 : 1 연관)가있는 여러 개의 작은 테이블을 가져야합니까, 아니면 가로로 큰 테이블을 사용해야합니까? (DB 디자인의 관점에서만, 관련성이없는 정규화와 관련된 쿼리 최적화를 고려하지 않음) –

2

열은 얼마나 넓습니까? 레코드가 페이지 크기보다 넓은 경우 하나의 넓은 테이블을 갖는 것은 발생하기를 기다리는 성능 문제입니다.

주소는 일반적으로 사람과 1-1 관계가 아닙니다. 그렇습니다. 대부분의 사람들은 오직 하나만 가지고 있습니다.하지만 그것은 모두에게 사실이 아닙니다. instcne 학생들은 때때로 이혼 한 부모들과 함께 파트 타임으로 생활합니다. 나는 그 주소가 분리되어야한다고 제안 할 것이다. 전화 번호를 저장하면이 두 사람은 일반적으로 1-1 관계에 있지 않습니다. 비즈니스 번호와 집 전화 (유선 전화) 번호가 핸드폰에있을 수 있습니다. 결국 하나의 관계에 있어야 할 필요가있는 좋은 가능성은 처음부터 분리되어야합니다.

테이블을 분리하고 일대일 관계를 적용하려는 경우 yuo는 부모 테이블의 ID를 자식 테이블의 PK로 사용하거나 테이블 및 테이블에 대해 서로 다른 Pk를 가질 수 있습니다. FK 필드에 대한 고유 색인을 올리십시오. 데이터베이스에서이를 시행 할 방법이없이 일대일 구내역을 설정하지 마십시오.