Страница 1 из 1
Вопросы по РНР+MySQL
Добавлено: Пн окт 30, 2006 10:02
DiMoN
В общем решил создать тему, в которой будут задаваться подобные вопросы по ВЕБ-программингу..
Итак, мой первый вопрос:
решил сделать что-то он-лайн теста наших молдавских билетов для автошколы... ну вот короче что хочу спросить:
мне нужно в БД (пользуюсь mysql'ем) занести вопросы и к каждому вопросу занести несколько вариантов ответа, т.е. я хотел бы, чтобы моя таблица выглядела примерно сл. образом:
и т.д.
как можно осуществить подобное в MySQL и вообще можно ли осуществить это... если нет, тогда прибегну к банальному методу...
Добавлено: Пн окт 30, 2006 10:10
Злобный
Нужна не одна таблица, а две. Одна - вопросы, другая - ответы, с внешним ключом на вопросы. Это если ты хочет иметь нормализованную базу.
Добавлено: Пн окт 30, 2006 10:16
DiMoN
Злобный,
аха.. понял.. но вот что значит "с внешним ключём" я не очень понял.. т.е. каждый вопрос сделать ключевым что ли??
Добавлено: Пн окт 30, 2006 10:22
Злобный
Questions:
ID int (PK)
Text
AllowsMultipleAnswers bit (bool)
Answers:
ID int (PK)
QuestionID int (FK references Ouestions.ID)
Text
IsCorrect bit (bool)
PK - Primary key - ключевое поле.
FK - Foreign key - поле внешнего ключа, ссылающееся на PK в другой таблице (или в той же).
но вот что значит "с внешним ключём" я не очень понял.. т.е. каждый вопрос сделать ключевым что ли??
Поле Question.ID - ключ, поле Answers.QuestionID - внешний ключ. А вообще, прежде чем браться за проектирование базы данных (даже такой простой), почитай теорию реляционных БД.
Добавлено: Пн окт 30, 2006 12:41
DiMoN
Злобный,
о... спасибо огромное =)
щас почитаю то что ты посоветовал =)
Слушай, а может у тебя есть какая-нить полезная ссылка по этому поводу? \
[off]добавлено спустя 2 часа 6 минут:[/off]
Злобный,
Слушай, не мог бы ты объяснить вот эту строчку:
AllowsMultipleAnswers bit (bool)
и вот эту:
IsCorrect bit (bool)
Добавлено: Пн окт 30, 2006 12:54
Злобный
Ну... AllowsMultiple - допускает ли вопрос несколько правильных ответов (чекбоксами чтобы выбрать).
Вроде как:
"Какая машина должна проехать перед тем, как ты сможешь повернуть налево?"
И ответы:
1) Та, что выезжает на перекресток справа
2) Та, что выезжает на перекресток слева
3) Та, что движется тебе навстречу
И правильных ответов два: 1 и 3. Значит AllowsMultiple у вопроса = true. Если правильный ответ может быть только один, то false. Тогда надо будет показать не чекбоксы, а радиобаттны.
IsCorrect: Ты забиваешь несколько ответов на каждый вопрос. Несколько неверных, и один (несколько) верных. Как твоя программа будет определять, правильный ли ответ выбрал пользователь? Для этого ей надо заведомо знать, правилен ответ или нет. Для этого и есть поле IsCorrect. Для верных ответов его выствишь в true, для неверных - в false.
По поводу теории баз данных, мне нравится Дейт. Щас уже, кажется, есть 8-е издание, я читал еще 6-е. Вот
описание книги. Саму книгу ищи сам.
Добавлено: Пн окт 30, 2006 21:38
DiMoN
Злобный,
AllowsMultiple - допускает ли вопрос несколько правильных ответов (чекбоксами чтобы выбрать).
не, предполагается лишь ОДИН правильный ответ, так что думаю этой части не понадобится..
за объяснение и книгу спасибо =)
и кстати, если кто-то будет просматривать эту тему и нужна будет ссылка для книги "К. Дж. Дейт: Введение в системы баз данных", то скачать её можно
ТУТ (внимание - это прямая ссылка для скачивания, файл весит 10 Мб, траффик внешний)
[off]добавлено спустя 8 часов 34 минуты:[/off]
Злобный,
Можешь посмотреть, правильно ли я составил талбицу (всё же мне пришлось попотеть, чтобы разобрать что ты имел ввиду под словом "реаляционные базы", при условии что я полный ноль в этом деле):
Код: Выделить всё
mysql> use q_db;
Database changed
mysql> create table question(id int primary key auto_increment, q text);
Query OK, 0 rows affected (0.09 sec)
mysql> create table answer(id int, a text, primary key (id), foreign key (id) re
ferences q_db.question(id));
Query OK, 0 rows affected (0.08 sec)
Добавлено: Пн окт 30, 2006 23:25
Злобный
неправильно. во второй таблице нужно поле questionId, которое references question(id). Ты логику вообще не догнал видимо. Ответ должен знать, к какому вопросу он относится. Это и есть поле QuestionID. И Флага "правильный" не вижу.
Добавлено: Ср ноя 01, 2006 17:53
DiMoN
Злобный,
блин, всё никак не могу втыкнуть, как правильно записать эту таблицу:
Answers:
ID int (PK)
QuestionID int (FK references Ouestions.ID)
Text
IsCorrect bit (bool)
у меня выдаёт:
Код: Выделить всё
ERROR 1005 (HY000): Can't create table '.\q_db\answer.frm' (errno: 150)
Добавлено: Ср ноя 01, 2006 19:21
Злобный
Я синтаксиса MySQL не знаю.

Почитай хелп, поищи описание ошибки в итернете, на худой конец.