Вопросы по РНР+MySQL

Модератор: Злобный

Ответить
Аватара пользователя
DiMoN
Отец
Сообщения: 4456
Зарегистрирован: Вт май 24, 2005 19:06
Откуда: Молдова\г. Кишинёв
Контактная информация:

Вопросы по РНР+MySQL

Сообщение DiMoN »

В общем решил создать тему, в которой будут задаваться подобные вопросы по ВЕБ-программингу..

Итак, мой первый вопрос:
решил сделать что-то он-лайн теста наших молдавских билетов для автошколы... ну вот короче что хочу спросить:
мне нужно в БД (пользуюсь mysql'ем) занести вопросы и к каждому вопросу занести несколько вариантов ответа, т.е. я хотел бы, чтобы моя таблица выглядела примерно сл. образом:
Изображение

и т.д.

как можно осуществить подобное в MySQL и вообще можно ли осуществить это... если нет, тогда прибегну к банальному методу...
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

Нужна не одна таблица, а две. Одна - вопросы, другая - ответы, с внешним ключом на вопросы. Это если ты хочет иметь нормализованную базу.
Аватара пользователя
DiMoN
Отец
Сообщения: 4456
Зарегистрирован: Вт май 24, 2005 19:06
Откуда: Молдова\г. Кишинёв
Контактная информация:

Сообщение DiMoN »

Злобный,
аха.. понял.. но вот что значит "с внешним ключём" я не очень понял.. т.е. каждый вопрос сделать ключевым что ли??
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

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 - внешний ключ. А вообще, прежде чем браться за проектирование базы данных (даже такой простой), почитай теорию реляционных БД.
Аватара пользователя
DiMoN
Отец
Сообщения: 4456
Зарегистрирован: Вт май 24, 2005 19:06
Откуда: Молдова\г. Кишинёв
Контактная информация:

Сообщение DiMoN »

Злобный,
о... спасибо огромное =)
щас почитаю то что ты посоветовал =)

Слушай, а может у тебя есть какая-нить полезная ссылка по этому поводу? \

[off]добавлено спустя 2 часа 6 минут:[/off]

Злобный,
Слушай, не мог бы ты объяснить вот эту строчку:
AllowsMultipleAnswers bit (bool)
и вот эту:
IsCorrect bit (bool)
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

Ну... AllowsMultiple - допускает ли вопрос несколько правильных ответов (чекбоксами чтобы выбрать).
Вроде как:
"Какая машина должна проехать перед тем, как ты сможешь повернуть налево?"

И ответы:
1) Та, что выезжает на перекресток справа
2) Та, что выезжает на перекресток слева
3) Та, что движется тебе навстречу

И правильных ответов два: 1 и 3. Значит AllowsMultiple у вопроса = true. Если правильный ответ может быть только один, то false. Тогда надо будет показать не чекбоксы, а радиобаттны.

IsCorrect: Ты забиваешь несколько ответов на каждый вопрос. Несколько неверных, и один (несколько) верных. Как твоя программа будет определять, правильный ли ответ выбрал пользователь? Для этого ей надо заведомо знать, правилен ответ или нет. Для этого и есть поле IsCorrect. Для верных ответов его выствишь в true, для неверных - в false.

По поводу теории баз данных, мне нравится Дейт. Щас уже, кажется, есть 8-е издание, я читал еще 6-е. Вот описание книги. Саму книгу ищи сам.
Аватара пользователя
DiMoN
Отец
Сообщения: 4456
Зарегистрирован: Вт май 24, 2005 19:06
Откуда: Молдова\г. Кишинёв
Контактная информация:

Сообщение 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)
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

неправильно. во второй таблице нужно поле questionId, которое references question(id). Ты логику вообще не догнал видимо. Ответ должен знать, к какому вопросу он относится. Это и есть поле QuestionID. И Флага "правильный" не вижу.
Аватара пользователя
DiMoN
Отец
Сообщения: 4456
Зарегистрирован: Вт май 24, 2005 19:06
Откуда: Молдова\г. Кишинёв
Контактная информация:

Сообщение 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)
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

Я синтаксиса MySQL не знаю. :) Почитай хелп, поищи описание ошибки в итернете, на худой конец.
Ответить

Вернуться в «Программирование»