6

나는 여러 유형의 사용자 (학생 및 교사)가있는 프로젝트에서 작업 중입니다. 현재 사용자 정보를 저장하기 위해 두 개의 테이블이 사용됩니다. users 테이블에는 모든 사용자가 공통으로 가지고있는 정보가 저장됩니다. teachers 테이블에는 교사 만 외래 키를 사용하여 가지고있는 정보가 users 테이블과 관련되어 저장됩니다.새 필드 추가 대 별도의 테이블 만들기

users 테이블

  • ID
  • 이름
  • 이메일
  • (34) 다른 분야

teachers 테이블

  • ID
  • USER_ID
  • 대상
  • 17 개 다른 분야 데이터베이스의 나머지 부분에서

, teachers.id에 대한 언급은 없다. 사용자와 관련이있는 다른 모든 테이블은 users.id을 사용합니다. 사용자는 교사 테이블에 하나의 해당 항목 만 가지므로 선생님 테이블의 입력란을 사용자 테이블로 이동하고 선생님이 아닌 사용자의 입력란을 비워 두어야합니까?

users

  • ID
  • 이름
  • 이메일
  • 대상
  • (51 개) 다른 분야

는 하나 개의 테이블이 너무 많은 분야인가? 이것이 성능을 저해합니까?

+0

55 개의 필드가 하나의 테이블에 약간 과장된 것으로 보입니다. 자주 사용하지 않는 정보 만 저장하는 UserDetail 테이블을 고려하고 더 자주 검색되는 정보를 Users 테이블에 보관할 수 있습니다. –

답변

2

나는이 디자인은 좋은 생각 (55 ?? 테이블을 받았는데) : 정말 성능을 해치지 않을 것입니다,하지만 당신은 그것을 redisign하지 않을 경우 다른 프로그래머는 당신을 해칠 수도 당신은 user 데이터 만 필요하며, teacher 특정 필드를 표시해야 할 때 알 수 있습니다.

또한 편리 할 수도있는 JOIN을 수행하면 교사 만받을 수 있습니다.

내일은 교사가 아닌 또 다른 종류의 사용자가있을 수 있습니다. 그러면 별거하게 될 것입니다.

덧붙여 편집 : 예, 이것은 상속 패턴이지만 그가 사용하고있는 언어를 말하지 않았기 때문에 나는 물을 진흙 투성이로하고 싶지 않았습니다 ...

+0

동의. 이것은 일종의 데이터베이스 상속 패턴이며 좋은 것입니다. –

+0

OP가 OP에 익숙하지 않았을 때를 대비해서 DB 상속 패턴을 언급하려고했습니다. 그래서 그는 그것을 찾을 수있었습니다 :) –

-1

대부분의 가정,

0

나머지 데이터베이스에는 teachers.id가 없습니다. 사용자와 관련이 있어야하는 다른 모든 테이블 은 users.id를 사용합니다.

I 클래스/섹션에 대한 teacher_id에 관한 기대

...

사용자 만 교사 테이블에서 하나 개의 해당 항목이 것이기 때문에, 난 그냥 선생님 테이블에서 필드를 이동해야 사용자 테이블에 입력하고 교사가 아닌 사용자를 비워 둡니다.

고등학교 또는 고등학생을위한 시스템을 모델링하고 있습니까? 내가 부탁하는 이유는 고등 교육에서 사용자가 여러 과목에서 교사와 학생이 될 수 있기 때문입니다.

0

나는 다른 사람이 "빈"열을 다른 목적으로 재사용하려는 유혹에 굴복하지 않는다고 생각합니다.

이 말은 새 테이블에는 교사 용으로 만 채워지는 열이 있다는 의미입니다. 누군가는 비 교사를 위해 저장할 필요가있는 또 다른 가치가 있다는 것을 결정할 수 있으며 교사의 칼럼 중 하나를 사용하여 그것을 보유 할 수 있습니다. 왜냐하면 결국이 비 교사가 필요하지 않을 것이고 그렇게하지 않기 때문입니다. 테이블을 변경할 필요가 있습니다. 그리고 곧 코드가 각 행의 내용을 찾기 위해 행 유형을 테스트하는 것을 채 웁니다.

나는 이것을 여러 시스템에서 보았다. (예를 들어, 대출이 긴 대출 일 경우 만기일은 책이 다시 기대되는 날짜가된다.) 그러나 짧은 대출 인 경우 만기가된다. 날짜는 예상되는 시간을 유지하고, 어쨌든 그것을 모르는 사람에게는 베테랑이 맞지 않습니다.

+2

방금 ​​방금 인수했습니다 ** ** 괜찮은 것은 아닙니다 ... – egrunin

+0

네, 그렇습니다. 소프트웨어 무역에서 풍부하지 않은 자질과 장기적인 사고가 많이 필요합니다. –

0

한 테이블에 너무 많은 필드가 없습니다 (세부 정보가 없더라도 의심 스러울 수 있습니다). 이 단계에서 성능에 대한 걱정은시기 상조입니다.

아마도 매우 적은 수의 행과 매우 적은 양의 데이터 만 처리 할 것입니다. 너는 1) 일을 끝내야한다. 2) 그것을 정확하게 고쳐야한다. 3) 그 순서대로 행동해야한다.

정말 큰 거래가 아닙니다 (이 단계/규모).

0

나는 하나의 테이블에 모든 필드를 채우지 않을 것이다. 학생 대 교사 비율이 높기 때문에 100 명의 교사에게는 17 개 필드에 NULL이있는 10000 명의 학생이있을 수 있습니다. 일반적으로 모델이 가까이 보일 것이다 : 당신이 Student 테이블을 생략 할 수 있으므로 모델이

과 같을 것이다 있도록

teacher_model_01

나는 당신의 경우, 학생들을위한 특별한 필드가없는 상속 모델링은 Teacher 표는 표 User 동일 UserID을 가지고

teacher_model_02

참고; 당신의 예제와 대조적으로 Teacher 테이블의 경우 Id을 입력 한 다음 user_id을 별도로 입력하십시오.

관련 문제