Я пытаюсь создать приложение опроса, которое может иметь изображения и вообще не может иметь никаких изображений. Если у него есть изображения, тогда у него может быть много или только один. Например, каждый выбор может иметь изображение или может быть только 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 я have to go with the BMW.
total_votes
- общее количество голосов, которое имеет вопрос, например, если может иметь 50 голосов, а date
- когда вопрос был отправлен.
В таблице " Choices
question_id
сообщает нам, к какому вопросу относится этот выбор: choice
дает выбор на вопрос, используя наш предыдущий пример автомобильного вопроса, у нас может быть выбор, который говорит BMW
и другой выбор, который говорит Audi
. vote_count
- это количество голосов, которое имеет каждый вопрос. Например, у нас может быть 25 голосов за BMW и 25 голосов за Audi (отсюда 50 total_votes в таблице "Вопросы").
В voting_history
choice_id
сообщает нам, какой выбор выбрал пользователь, а user_id
сообщает, какой пользователь он был. date
- время голосования.
В Images
question_id
- это вопрос, к которому относится изображение, img
- это URL-адрес изображения вопроса. Чтобы лучше понять эту таблицу, здесь приведен пример опроса:
Название - Роналду против Месси, без описания, total_votes - 50, с двумя вариантами, и у него есть 2 изображения. Эти изображения будут сохранены в таблице " Images
. У нас будет строка для каждого изображения. Теперь скажем, что у нас есть этот опрос:
Для этого вопроса у нас будет только 1 изображение в таблице " Images
. Является ли это хорошим способом построения схемы таблиц? Это эффективно?
Скажем, у нас есть только 1 изображение, тогда первый выбор будет иметь изображение, но остальные изображения не будут содержать никаких строк в таблице изображений. Если у нас есть 2 варианта и есть 2 изображения, тогда каждый выбор будет иметь изображение.
Это рецепт несогласованности. В примере Ronaldo/Messi вы, вероятно, хотите убедиться, что изображения соответствуют кнопкам/выборам, а не полагаться на упорядочение суррогатных ключей (?), Чтобы это произошло. Это предполагает наличие внешнего ключа от изображений до выборов, а не вопросов.
Во втором примере изображение не связано ни с каким конкретным выбором, но с самим Вопросом. Это предполагает отдельную таблицу для таких изображений.
img
? Это просто URL, указывающий на изображение? ИлиMEDIUMBLOB
?