2011-11-25 2 views
0

나는 작업 모델과 사용자 모델을 가지고 있습니다. 각 사용자이 특정 을 기반으로하는 몇 가지 질문에 대답 할 수 있어야합니다. 각 질문은 1에서 10까지 (또는 답변이 없음) 표시됩니다.사용자가 주제에 대해 투표 할 수 있도록하는 데이터베이스 구조

나는 hasMany through 연관이 필요하다고 생각하지만 이전에는 이것들을 혼동했다.

누군가 내 데이터베이스/모델 레이아웃을 도와 줄 수 있습니까? 감사.

편집 :

  • 순간에 내가 가진 유일한 테이블은 사용자와 작업
  • 질문은 모든 작업에 대해 동일합니다, 그 중 여섯 (미래에 어쩌면 더)가있다
  • 질문은 항상 1에서 나는 그것이해야한다고 생각 (10) (또는 답)
+0

어디에서 질문을합니까? 그들은 욥 테이블에 있습니까? –

+0

향후 질문 수가 증가 할 수 있다면 질문을 별도의 테이블에 넣는 것을 고려해야합니다. –

+0

지금 가지고있는 유일한 테이블이 사용자 및 작업 인 경우 어디에서 질문을합니까? Jobs 테이블에 있거나 페이지의 html/php에 있습니까? 그리고 당신은 어디에서 답 값을 유지합니까? –

답변

2

예, hasMany의 완벽한 candidat을 통해, 난과 같이 그것을 할 수 있습니다 :

User hasMay JobQuestion 
Job hasMany JobQuestion 

JobQuestion belongsTo Job, User 

가 JobQuestion 모델의 모든 질문을했습니다. 이 모델에 더 적절한 이름이있을 수 있습니다. 모델 키에 대한 자세한 내용이 필요합니까?

편집 :

JobQuestion 모델의 행 것 :

ID | user_id | job_id | 질문 1 | ... | questionN

귀하의 데이터 배열은 같은 질문으로

Array 
(
    [0] => Array 
     (
      [JobQuestion] => Array 
       (
        [id] => 1 
        [user_id] => 1 
        [job_id] => 1 
        [question1] => answer1 
        [question2] => answer2 
       ) 

      [Job] => Array 
       (
        [id] => 1 
        [name] => somejob 
       ) 

      [User] => Array 
       (
        [id] => 1 
        [username] => someuser 
       ) 

     ) 

) 
+0

JobQuestion의 행에 대한 예를 들어 주시겠습니까?kaklon 대한 +1 – 472084

+0

@Jleagle (1,1,1,5,10) –

2

에 수있을 것입니다 :

테이블 : 사용자는 작업은, 질문,

  • 작업 hasMany의 대답 질문
  • 사용자 hasMany의 답변
  • 질문 hasMany의 는 답변
,536 어떻게 든 작업에 통합되어있는 경우가 질문 테이블이 필요하지 않습니다 USER_ID, question_id, 답 (NULL 또는 1-10)

:

귀하의 대답 테이블에는 다음과 같은 열이있을 수 있습니다.

편집 : 댓글 제안에 따라 응답 테이블에서 중복 ID을 제거하기 위해 업데이트되었습니다.

+1

사용자가 한 번만 질문에 대답 할 수 있어야하므로 Answer 테이블을 더 정상화 한 다음 ID 필드를 제거 하시겠습니까? 이 경우 ID가 중복 될 수 있기 때문입니다. – Tobias

+0

@ 토비아스 포인트 찍은. 기존 테이블에 대해 더 많이 알고 있다면 정규화하기가 더 쉬울 것입니다. –

+1

응답과 응답을 구분할 수도 있습니다. 질문에 대한 가능한 대답이 항상 1에서 10까지의 숫자 일지 여부는 원본 게시물에서 알기가 어렵습니다. 그렇지 않은 경우 (즉, 여러 선택 또는 텍스트 응답 등이있을 수있는 경우) 답변 (즉, 질문 당 가능한 모든 대답)과 응답 (사용자가 선택한 질문에 대한 답변)에 대해 별도의 표를 사용합니다. – liquorvicar

1

모델을 올바르게 이해하면 사용자가 작업을 선택한 것처럼 들리는 동시에 해당 작업에 관련된 질문에 답할 수 있습니다 (그 중 일부는 둘 이상의 작업에 적용될 수 있음). 그렇다면 테이블 구조가 다음과 같이 보일 것이라고 생각합니다.

먼저 개별 엔터티가 있습니다.질문 중 일부는 자연 일반적이며, 하나 개 이상의 작업에 적용 할 경우, 다음 질문은 다음과 같이 정의해야한다는

Users: 
    UserID (PK) 
    User 

Jobs: 
    JobID (PK) 
    JobName 

참고는 다음과 같습니다

Questions 
    QuestionID (PK) 
    Question 

을 그렇지 않으면, 각 질문에 해당하는 경우 특정 작업, 당신은 적어도 하나 개의 연관 테이블을 피하고 질문 테이블에 채용에 FK를 통합 할 수 있습니다 :

Questions 
    QuestionID 
    JobID 
    Question 

하지만 QUES이 확실하지 않으면 나는 이것을하지 않는 것이 좋습니다 각 직업에 고유하게 적용됩니다.

다음, 협회 : User_Job_Questions가 작업 ID와 QuestionID 사용자로 다시 Job_Questions 다시 관련된 다른 FK에 복합 FK를 포함 할 것이라고

User_Jobs (Composite key = FK on USerID, FK on JobID) 
    UserID 
    JobID 

Job_Questions (Composite Key = FK on JobID, FK on QuestionID) 
    JobID 
    QuestionID 

User_Job_Questions (this one would contain a feild for responses, and could also be named User_Response) 
    UserID 
    JobID 
    QuestionID 
    Response (likley constrained to ints from 1-10) 

참고.

+0

나는 주로 다음에 관한 나의 질문을 업데이트했다 : "질문은 모든 직업에 동일하며, 앞으로 6 개가 더 많을 것" – 472084

0

작업 hasAndBelongsToMany의 질문과 같은 여러 작업에 적용 할 수있는 것.

그러나 답변을 구현하려면이 방법을 사용하십시오 (HasManyThoughJoin). JobQuestion 테이블에서 대답과 user_id를 저장할 수 있습니다.

관련 문제