Я пытаюсь создать приложение для опроса, которое может иметь изображения, а может и вовсе не иметь изображений. Если у него есть изображения, то их может быть много или только одно. Например, каждый вариант может иметь изображение или может быть только 1 изображение для всех вариантов. Вот хороший пример того, что я хочу создать: Этап мнения .
Вот схема таблицы, о которой я думаю:
Questions //Table of all questions with total votes to avoid querying all user votes
-id
-user_id (foreign key to users)
-title
-description
-total_votes
-date
Choices //Table of all question choices, each will have vote_count to avoid querying all voting_history each time.
-id
-question_id (foreign key to questions)
-choice
-vote_count
voting_history //Table that shows which user voted for what.
-id
-choice_id (foreign key to choices)
-user_id (foreign key to users)
-date
Images //Table that gives the images for the choices
-id
-question_id (foreign key to Questions)
-img
Допустим, у нас есть только 1 изображение, тогда у первого выбора будет изображение, но у остальных изображений не будет строк в таблице изображений. Если у нас есть 2 варианта и 2 изображения, то у каждого варианта будет изображение.
Подробнее о том, что делает каждая строка в каждой таблице:
В Questions
, user_id
- это поле, представляющее, кто задал вопрос, title
- это заголовок вопроса, description
- описание вопроса. Например, у нас может быть заголовок, который говорит это: Which car is better?
и описание, которое говорит это: I like both, but I have to go with the BMW.
* total_votes
- это общее количество голосов, которое имеет вопрос, например, если может иметь 50 голосов, и date
когда вопрос был опубликован.
В таблице Choices
, question_id
говорит нам, какому вопросу принадлежит этот выбор, choice
дает выбор вопроса, используя наш предыдущий пример вопроса об автомобиле, у нас может быть выбор, который говорит BMW
и другой выбор, который говорит Audi
. vote_count
- количество голосов, которое имеет каждый вопрос. Например, у нас может быть 25 голосов за BMW и 25 голосов за Audi (отсюда 50 итоговых голосов в таблице вопросов.)
В voting_history
, choice_id
сообщает нам, какой выбор выбрал пользователь, а user_id
сообщает нам, какой это был пользователь. date
время голосования.
В Images
, question_id
- это вопрос, к которому принадлежит изображение, img
- это URL-адрес изображения вопроса. Чтобы лучше понять эту таблицу, вот пример опроса:
![enter image description here](https://i.stack.imgur.com/H751x.png)
Название - Роналду против Месси, без описания, total_votes - 50, с 2 вариантами выбора и 2 изображениями. Эти изображения будут сохранены в таблице Images
. У нас будет строка для каждого изображения. Теперь допустим, у нас есть этот опрос:
![enter image description here](https://i.stack.imgur.com/ylyEP.png)
У нас будет только 1 изображение в таблице Images
для этого вопроса. Это хороший способ построить схему таблицы, как это? Это эффективно?