Рейтинг:
4
OriginalGriff
Ну...есть вещи, которые я бы изменил.
Во-первых, почему БИГИНТ? Сколько вопросов вы планируете задать?
Во-вторых, почему с каждым ответом связан бит, который говорит: "это правильный ответ"?
Я бы сделал это так, чтобы иметь идентификатор "CorrectAnswer" как часть вопроса, и я бы удалил ссылку из ответа на вопрос, заменив ее тремя индексами ответов. Поскольку вы фиксированы на трех ответах на каждый вопрос, это просто облегчает проверку ответов позже. И вы можете "переработать" ответы, используя их для нескольких вопросов.
Я бы также добавил еще одну таблицу, связывающую игрока, вопрос и ответ, чтобы у вас было средство записи его результатов. Я бы, вероятно, также добавил дату в эту таблицу, чтобы ваш пользователь мог повторить тест, возможно, с другими вопросами и / или ответами.
В остальном, чтобы узнать, работает ли это, нужно попробовать. На бумаге при необходимости выполните все действия, которые нужно пользователю, чтобы иметь возможность выполнить и доказать, что система работает. Если вы нашли что - то трудное, то это хороший момент, чтобы "переосмыслить" элементы вашего дизайна-попробуйте сделать это правильно, прежде чем вы зафиксируете фактическую базу данных, и все должно идти быстрее.
MyOldAccount
Спасибо за помощь.
Во-первых, почему БИГИНТ? Сколько вопросов вы планируете задать?
Наверное, я действительно переборщил... Количество вопросов-20.
Во-вторых, почему с каждым ответом связан бит, который говорит: "это правильный ответ"?
Я бы сделал это так, чтобы иметь идентификатор "CorrectAnswer" как часть вопроса, и я бы удалил ссылку из ответа на вопрос, заменив ее тремя индексами ответов.
Я согласен на перенос идентификатора " правильного ответа "в таблицу вопросов, но я не понимаю, что вы имели в виду под "удалением ссылки из ответа на вопрос, заменив ее тремя индексами ответов"." Я не знаю, как этого добиться, не могли бы Вы уточнить?
Я бы также добавил еще одну таблицу, связывающую игрока, вопрос и ответ, чтобы у вас было средство записи его результатов.
Я думал стол PlayerChoices
уже делает это...
OriginalGriff
Вместо того, чтобы держать QuestionID в ответе, держите три Answerid в вопросе.
Я забыл о выборе игроков...: O
Разверните это, чтобы также ссылаться на вопрос (иначе вы не знаете, на какой вопрос это был ответ!) - и я бы все равно поставил дату и время на каждую запись. Это также позволяет упорядочить данные в той последовательности, в которой они ответили.
MyOldAccount
Я бы все равно поставил дату и время на каждую запись. Это также позволяет упорядочить данные в той последовательности, в которой они ответили.
OFC... Я так и сделаю.
Разверните это, чтобы также ссылаться на вопрос (иначе вы не знаете, на какой вопрос это был ответ!)
Да, после изменения моего дизайна в соответствии с вашими предложениями это будет необходимо.
Я забыл о выборе игроков...: O
Происходит :)
Вместо того, чтобы держать QuestionID в ответе, держите три Answerid в вопросе.
Я предположил, что это была ваша идея.
Тем не менее, у меня есть одна забота о целостности данных, относительно ответов:
ID TextOfTheQuestion CorrectAnswerID WrondAnswer1ID WrongAnswer2ID
1 bla 1 1 1
Мы видим, что все 3 Ссылки могут содержать 1, но должны содержать 3 разных значения.
Как я должен защитить себя от этой ошибки ( надеюсь, вы понимаете мою точку зрения, если нет, я уточню)?
Еще раз спасибо!
OriginalGriff
Не называйте их " правильными "и" неправильными": назовите их AnswerA, Answer B, ... и имейте отдельный столбец, который содержит" правильный " идентификатор. Таким образом, вы можете вставить "правильный" ответ в любой столбец, и это облегчает их отображение - правильный ответ не всегда является первым!
Защитите себя, убедившись, что ваш код этого не делает! :смеяться:
На самом деле не стоит пытаться заставить систему запрещать комбинации на уровне БД - это действительно функция "более высокого уровня", и ее следует выполнять в вашем коде C#, где это а) проще и Б) логичнее. Почему БД должен знать, что некоторые комбинации запрещены?
MyOldAccount
Не называйте их " правильными "и" неправильными": назовите их AnswerA, Answer B, ... и имейте отдельный столбец, который содержит" правильный " идентификатор. Таким образом, вы можете вставить "правильный" ответ в любой столбец, и это облегчает их отображение - правильный ответ не всегда является первым!
Ладно, спасибо за совет.
Защитите себя, убедившись, что ваш код этого не делает! :смеяться:
На самом деле не стоит пытаться заставить систему запрещать комбинации на уровне БД - это действительно функция "более высокого уровня", и ее следует выполнять в вашем коде C#, где это а) проще и Б) логичнее. Почему БД должен знать, что некоторые комбинации запрещены?
Наверное, я слишком параноик. :) Я сделаю так, как вы сказали, и проверю код.
------------------------
У меня все еще есть проблемы с переводом ваших советов в конкретный дизайн.
Ниже приведен текущий дизайн, который у меня есть.
Не могли бы вы, пожалуйста, быстро взглянуть и предложить какие-либо улучшения/исправления? Спасибо!
--------------------------
Игроки За Столом:
ID int (первичный ключ, идентификатор)
Имя нварчар(100)
Вопросы Таблицы:
ID int (первичный ключ, идентификатор)
TextOfTheQuestion nvarchar(100)
correctAnswer int (внешний ключ к Answers.ID)
a int (внешний ключ к Answers.ID)
b int (внешний ключ к Answers.ID)
c int (внешний ключ к Answers.ID)
Таблица Ответов:
ID int (первичный ключ, идентификатор)
TextOfTheAnswer nvarchar (100)
Таблица PlayerChoices:
PlayerID int (внешний ключ к Players.ID)
QuestionID int (внешний ключ к Questions.ID)
AnswerID int (внешний ключ к Answers.ID)
OriginalGriff
Не называйте их "a", "b" и "c" - называйте их "Answer1ID", "Answer2ID" и "Answer3ID" - это немного больше набора текста, но это делает использование намного более понятным.
Аналогично, не "за украсить" свои имена: "ответы.Текст" понятнее, чем "ответы.TextOfTheAnswer" - и то же самое для вопросов.
И я бы все равно добавил метку даты в таблицу PlayerChoices.
MyOldAccount
И я бы все равно добавил метку даты в таблицу PlayerChoices.
Я просто все время забываю это делать! :) Не волнуйтесь, я сделаю так, как вы предложили.
Не называйте их "a", "b" и "c" - называйте их "Answer1ID", "Answer2ID" и "Answer3ID" - это немного больше набора текста, но это делает использование намного более понятным.
Аналогично, не "за украсить" свои имена: "ответы.Текст" понятнее, чем "ответы.TextOfTheAnswer" - и то же самое для вопросов.
Нет проблем, я просто хотел сделать комментарии/ОП кристально ясными.
---------
Так вот какой дизайн вы предлагали? Извините за вопрос, но это мой первый раз, когда я встречаю сценарий "3 внешних ключа к одному и тому же идентификатору" (вопросы таблицы имеют 4 поля, которые ссылаются Answer.ID).
Опять же, если бы вы могли тщательно проверить, что у меня нет других ошибок, я был бы благодарен. Еще раз спасибо за помощь!
OriginalGriff
Звучит примерно так.
Как я уже сказал: Попробуйте на бумаге и посмотрите, как все пойдет.
MyOldAccount
Похоже, что эта конструкция подойдет. Я предложил вам решение и официально принял его. Спасибо снова.