Структура базы данных, позволяющая пользователям голосовать по теме - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть модель Job и модель User .Мне нужен каждый Пользователь , чтобы иметь возможность ответить на несколько вопросов на основе конкретной Задания .Каждый вопрос отмечен от 1 до 10 (или без ответа).

Я считаю, что мне нужны hasMany through ассоциации, но они были смущены до этого.

Можеткто-то поможет мне с моей базой данных / макетом модели.Спасибо.

РЕДАКТИРОВАТЬ:

  • Единственные таблицы, которые у меня есть на данный момент, это пользователи и вакансии
  • Вопросы одинаковы для всехвакансии, их шесть (может быть, больше в будущем)
  • Вопросы всегда будут числами от 1 до 10 (или без ответа)

Ответы [ 4 ]

2 голосов
/ 25 ноября 2011

Да, идеальный кандидат для hasMany через, и я сделаю это следующим образом:

User hasMay JobQuestion
Job hasMany JobQuestion

JobQuestion belongsTo Job, User

поставьте все свои вопросы в модели JobQuestion.Для этой модели может быть более подходящее название.Вам нужно больше деталей для ключей моделей?

Редактировать:

Строка в модели JobQuestion будет:

id |user_id |job_id |вопрос1 |... |вопросN

Ваш массив данных будет выглядеть примерно так:

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
                )

        )

)
2 голосов
/ 25 ноября 2011

Я думаю, что это должно быть:

Таблицы: пользователь, работа, вопрос, ответ

  • Работа hasMany Вопросы
  • Пользователь hasMany Ответы
  • Вопрос hasMany Ответы

Ваша таблица Ответ может содержать следующие столбцы: user_id, question_id, answer (NULL или 1-10)

Вам не понадобится таблица Question , если она каким-либо образом интегрирована в Job .

РЕДАКТИРОВАТЬ: Обновлено для удаления избыточного id из таблицы ответов в соответствии с предложением комментария.

1 голос
/ 25 ноября 2011

Если я правильно понимаю вашу модель, похоже, что пользователи выбирают вакансии, а затем отвечают на вопросы, относящиеся к этой работе (некоторые из которых могут относиться к более чем одной работе)? если так, я думаю, что ваша структура таблицы должна выглядеть примерно так:

Сначала есть ваши дискретные сущности.

Users:
    UserID (PK)
    User

Jobs:
    JobID (PK)
    JobName

Обратите внимание, что если некоторые вопросы носят общий характер и относятся к более чем одной работе, то Вопросы должны быть определены следующим образом:

Questions
    QuestionID (PK)
    Question

В противном случае, если каждый вопрос относится к определенной работе, ваш МОЖЕТ избегать хотя бы одной таблицы ассоциаций и включать FK для рабочих мест в таблицу вопросов:

Questions
    QuestionID
    JobID
    Question

Но я не рекомендую этого, если вы не уверены, что Вопросы относятся к каждой работе.

Далее ваши ассоциации:

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)

Обратите внимание, что User_Job_Questions будет содержать составной FK для JobID и QuestionID, относящийся к Job_Questions, и другой FK обратно для Пользователей.

0 голосов
/ 25 ноября 2011

Job hasAndBelongsToMany Вопрос, поскольку один и тот же вопрос может применяться к нескольким вакансиям.

Однако для реализации ваших ответов вы используете этот подход, HasManyThoughJoin .В таблице JobQuestion вы можете сохранить ответ И идентификатор_пользователя.

...