2012-10-28 3 views
1

학생 단체가 있는데, 이제는 학생 테이블과 학생 속성 테이블을 만들고 싶습니다. dob, age, salary. 학생들의 특성은 약 120데이터베이스 속도는 열 또는 행 (레코드)에 따라 다릅니 까?

그래서 더 나은 미래 테이블의 성능과

  1. 하나 개의 테이블 (student_mst) 만들기 내 MySQL의 조작

    옵션에 대한 모든 학생과 것이다 좋은과 열로 어떤 속성 데이터 유형

  2. 또는 관계가있는 두 개의 테이블 (student_mst, student_attributes)을 만들고 학생 속성의 다중 레코드를 table - student_attributes.

답변

1

두 가지 완전히 다른 접근 방식이므로 완전히 데이터를 사용하는 방식에 따라 다릅니다. 성능은 데이터에 액세스하려는 방식과 잘 작동하지 않는 모델을 선택하는 경우에만 문제가됩니다.

첫 번째 옵션은 모든 학생이 모든 속성 또는 대부분의 속성을 사용하고 고정 된 속성 집합이있는 경우 자연 접근입니다.

두 번째 옵션은 학생들이 다른 속성 집합을 갖고 있고 속성 집합을 확장 할 가능성이있는 경우에 유용합니다.

첫 번째 방법을 사용하면 일반적으로 서로 다른 쿼리를 작성하여 다른 특성을 사용합니다. 예를 들어 학생들의 목록을 얻고 몇 가지 특성을 반환하는 것이 쉽습니다. 예 :

select StudentId, Name, Age, Class, Grade 
from Students 
order by Age desc 

두 번째 방법을 사용하면 일반적으로 기본 학생 정보와 학생 속성을 따로 얻을 수 있습니다. 어떤 특성을 가진 학생들의 목록을 얻는 것은 더 복잡 할 것이며, 당신이 얻고 자하는 더 많은 속성을 구축합니다. 예 :

select s.StudentId, Name = a1.Value, Age = a2.Value, Class = a3.Value, Grade = a4.Value 
from Students s 
inner join Attributes a1 on a1.StudentId = s.StudentId 
inner join Attributes a2 on a2.StudentId = s.StudentId 
inner join Attributes a2 on a3.StudentId = s.StudentId 
inner join Attributes a3 on a4.StudentId = s.StudentId 
order by cast(a.Value as int) desc 
0

일반적으로 관계형 데이터베이스에서 비용이 많이 드는 작업은 데이터 집합의 "회선"을 복구하는 것입니다. 열로도 필터링 할 수 있다는 것은 최종 데이터 집합을 더 잘 조정할 수있는 구문상의 설탕으로 나타납니다. 따라서 줄 사이의 관계를 조정하는 방식을 최적화하려고 시도하고 검색 열 성능에 영향을 미치지 않는 열의 수에 대해 너무 신경 쓰지 말고 주로 "이동하는 데이터의 양에 달려 있습니다 ".

0

당신이 관련 속성 테이블에 갈 경우 @Guffa

에 의한 대답의 상단에 좀 더 고려 사항. 각 학생의 모든 속성은 속성 ID와 학생 ID를 요구할 것입니다. 예를 들어, 정수라면 8 바이트를 말합니다. 그래서 얼마나 희소성이 있는지 생각할 가치가 있습니다.

120 개의 속성을 그룹화 할 수 있습니까? 아마도 속성 유형/그룹 및 일부 1 - 1 확장 테이블 일 수 있습니다.

학생과 그 모든 속성 대 특성을 가진 모든 학생을 얻는 경우.

쿼리 할 속성이 거의 없다면 XML 스 니펫이나 나머지는 직렬화 된 개체를 살펴볼 가치가 있습니다.

가 마지막으로 복잡한 쿼리에 가입

는 대신 그들을 선회 수, 또는 당신은 그 명확한있을 것 다시 하나를 얻을 두 개의 열로 가입 할 수 (:) 그 중 120을 싶지 않을 것이다) 당신이 그것들을 어떻게 UI에 말하도록 매핑했는지에 대한 영향.

정답은 없지만, SQL을 흩 뜨리는 대신 스키마를 숨기면 디자인에 돌이키도록 설정하면 안됩니다.

0

일반적으로 테이블의 열 구성을 데이터의 논리적 구조로 유도하고 인덱스와 같은 물리적 디자인 기능을 사용하여 작업 속도를 높이는 것이 좋습니다.

학생의 속성이 학생 테이블에 속하는지 여부는 대부분 모든 학생에게이 속성이 있는지 또는 일부 학생인지에 대한 질문입니다. 모든 학생들이 속성을 가지고 있다면, 학생 테이블에 속성을 유지하는 것은 일반적으로 검색 시간에 조인을하는 것보다 빠르다. 논리적 인 접근 방식이기도합니다.

다른 한편으로는 특정 학생에게만 관련된 속성이있는 경우 사례를 분석하여 학생의 특수 하위 집합을 처리하는지 여부를 확인해야합니다. 이것이 사실이라면, 당신은 "ER Specializaton"을 찾아서 이것이 개념적 수준에서 어떻게 모델링 될 수 있는지 알아볼 필요가 있습니다.

관계형 디자인이 특수화를 구현하는 방법을 보려면 "클래스 테이블 상속"을 찾아보십시오.

관련 문제