2011-08-16 2 views
2

저는 각 사용자가 광범위한 프로필을 작성해야하는 응용 프로그램을 만들고 있습니다.하나의 MySQL 테이블에 많은 사용자 정보를 저장하고 있습니까?

사용자 프로파일의 첫 번째 부분은

사용자 프로파일의 다음 부분들이 일련의 기준리스트에 자신을 평가 섹션 인 일반 정보 약 25 정도의 필드로 구성된다. 예를 들어, "당신이 요리하는 데 얼마나 좋은지 평가"하고 1에서 5까지 라디오 상자를 체크하고, 자신이 평가 한 활동/주제에 "추가 관심이 있는지"확인할 수있는 확인란이 있습니다.

그들 중 약 40 명이 자신을 평가하고 있습니다.

제 질문은이 정보를 모든 필드와 항목에 대한 내 사용자 테이블에 열이 있어야 어떻게 저장해야합니까? 이것은 거의 70 개의 필드가 될 것입니다.

또는 user_profile 및 user_self_evaluation에 대한 테이블을 설정하고 각각에 대한 열을 갖고 사용자와 일대일 관계를 설정해야합니까?

답변

2

별도의 표를 사용하십시오. 이런 방식으로 자체 평가 만 갱신하면 user_profile 테이블을 갱신 할 필요가 없습니다. 여기서 생각하는 부분은 자주 업데이트되는 필드를 다른 테이블에 분리하여 드물게 다른 위치에 업데이트하는 것입니다. 테이블이 커지고 사용자 이름/비밀번호가 별도의 테이블에있는 경우 많은 양의 업데이트 쿼리에 의해 userid/username에 의한 조회 성능이 영향을받지 않으며 해당 테이블을 변경하면 전체 사이트가 다운되지 않습니다. self_evaluation 테이블.

그러나 만약 당신이 새로운 평가를 추가 할 계획이라면, 내가 다른 디자인 좋을 것 : 25 프로필 필드 self_evaluations 테이블 user_profile로 테이블, ID와 이름, 질문에 대한 메타 정보를; 평가 당 1 레코드로 user_profile_evaluation with userid, evaluationid, score, extra - 각 사용자 평가마다 하나의 레코드가 있어야합니다.

이렇게하면 스키마가 훨씬 더 유연 해지며 다른 평가를 추가하기 위해 테이블을 변경할 필요가 없습니다.

+0

+1 세 개의 테이블 솔루션 - user_profile_evaluation과 user-profile 및 self_evaluations 간의 연결 테이블과의 다 대다 관계. –

0

필자는 후자의 것이 더 좋다고 생각합니다. 70 개의 열이있는 테이블은 실제로보기가 좋지 않으며 관리하려고하면 실제로 더 심해질 수 있습니다.

모든 질문이 객관식 인 경우 각 대답에 대해 하나의 필드에 숫자를 추가 할 수도 있습니다.

의 당신이 4 개 선택 4 개 개의 질문을 가지고 있다고 가정 해 봅시다 :

한 열라고 회답에, (첫 번째 질문은 답 1, 두 번째 대답은 4, 제 대답은 3, 마지막 1433로

당신이 그들을 구할 수 하지만 적어도 질문 4는 대답 3)

여기에 몇 가지 선택 사항을 제공합니다.

그러나 1 대 1 관계와 1 표 중에서 선택해야한다면 나중에 관리하기가 쉽기 때문에 하나의 관계를 하나 선택해야합니다.

+1

70 개의 열이 하나의 테이블에있는 경우는 그다지 크지 않습니다. 여기서 문제는 각 사용자와 평가 응답 사이에 일대 다 관계가 있다는 것입니다. 또한 모든 응답 값에 대한 answerrs라는 단일 열이 첫 번째 정규 양식을 위반합니다. –

+1

5 년 전부터 내 대답을 읽고, 나는 꽤 신참이었다. –

0

아니면를 셋업 user_profile로 표하고 user_self_evaluation, 거기에 각 열을 가지고는 사용자와 일대일 관계 을해야합니까?

앞으로 테이블을 확장하지 않을 것이라는 점을 알고 계신다면이 방법을 사용하십시오. 다른 옵션은 너무 나쁩니다.


당신이 미래에 평가를 확대 할 생각한다면, 당신은 이런 식으로 작업을 수행 할 수 있습니다

user_self_evaluation 테이블

user_id | evaluation_type | evaluation_value 
1  | cooking   | 5 
1  | singing   | 3 
2  | cooking   | 2 
2  | singing   | 5 

결합 된 열을 확인 (USER_ID, evaluation_type, evaluation_value) 고유 또는 기본.

관련 문제