Mysql
 sql >> база данни >  >> RDS >> Mysql

Ръководство за проектиране на база данни за тест в MySQL

Този урок предоставя пълни стъпки за проектиране на схема на база данни от онлайн тестове и системи за тестове за управление на потребителите, тестове, въпроси, отговори и решения. Може да се използва допълнително за разработване на уебсайтове или приложения за онлайн тестване или тестове.

Диаграмата на взаимоотношенията на обектите или визуалният дизайн на базата данни е показан по-долу.

Фигура 1

Бележки :Ограничава се само влезли потребители, за да участват в теста, за да се избегне спам. Тестовете се считат за кратки в сравнение с тестовете.

Можете също така да посетите популярните уроци, включително Как да инсталирате MySQL 8 на Ubuntu, Как да инсталирате MySQL 8 на Windows, RBAC база данни в MySql, Блог база данни в MySql, Научете основни SQL заявки в MySQL.

База данни за тестове

Първата стъпка е да създадете базата данни за тестове. Може да се създаде с помощта на заявката, както е показано по-долу.

CREATE SCHEMA `quiz` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Използвал съм набора от знаци utf8mb4 за поддръжка на широк спектър от знаци.

Таблица с потребители

В този раздел ще проектираме Таблица на потребителите за съхраняване на потребителска информация. Същата таблица може да се използва за свързване на домакините на викторини, така че потребителите да могат да управляват свои собствени тестове и да проследяват вземанията. По-долу е посочено описанието на всички колони на потребителската таблица.

Id Уникалният идентификатор за идентифициране на потребителя.
Име Първото име на потребителя.
Биринно име Биринното име на потребителя.
Фамилия Фамилията на потребителя.
Мобилни Мобилният номер на потребителя. Може да се използва за влизане и регистрация.
Имейл Имейлът на потребителя. Може да се използва за влизане и регистрация.
Хеш на парола Хешът на паролата, генериран от подходящия алгоритъм. Трябва да избягваме съхраняването на обикновени пароли.
Хост Флагът за идентифициране дали потребителят може да хоства тест.
Регистриран в Тази колона може да се използва за изчисляване на живота на потребителя с приложението.
Последно влизане Може да се използва за идентифициране на последното влизане на потребителя.
Въведение Краткото представяне на потребителя-хост, което да се покаже на страницата за тест или тест.
Профил Данните за собственика да се показват на страницата за тест или тест.

Потребителската таблица със съответните ограничения е както е показано по-долу.

CREATE TABLE `quiz`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`host` TINYINT(1) NOT NULL DEFAULT 0,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );

Таблица за тестове

В този раздел ще проектираме Таблица за тестове за съхраняване на данните от теста. По-долу е посочено описанието на всички колони на таблицата за тестове.

Id Уникалният идентификатор за идентифициране на теста.
Идентификатор на хост Идентификаторът на хоста за идентифициране на хоста на теста.
Заглавие Заглавието на теста, което да се показва на страницата на теста и списъците.
Метазаглавие Мета заглавието, което ще се използва за заглавие на браузъра и SEO.
Плюс Плужката за формиране на URL адреса.
Резюме Резюме за споменаване на ключови акценти.
Тип Типът за разграничаване между теста и теста.
Резултат Общата оценка на теста.
Публикувано Може да се използва за идентифициране дали тестът/тестът е публично достъпен.
Създаден в Той съхранява датата и часа, в които е създаден тестът/тестът.
Актуализирано в Той съхранява датата и часа, в които тестът/тестът се актуализира.
Публикувано в Той съхранява датата и часа, в които тестът/тестът е публикуван.
Започва в Той съхранява датата и часа, в които започва теста/теста, и се отваря за дубли.
Завършва в Той съхранява датата и часа, в които тестът/тестът приключва за дубли.
Съдържание Колоната, използвана за съхраняване на данните от теста/теста.

Таблицата за тестове със съответните ограничения е както е показано по-долу.

CREATE TABLE `quiz`.`quiz` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`hostId` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`score` SMALLINT(6) NOT NULL DEFAULT 0,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`startsAt` DATETIME NULL DEFAULT NULL,
`endsAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_quiz_host` (`hostId` ASC),
CONSTRAINT `fk_quiz_host`
FOREIGN KEY (`hostId`)
REFERENCES `quiz`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Мета тест

Метатаблицата на теста може да се използва за съхраняване на допълнителна информация за тестове или тестове, включително URL адреса на банера на теста и т.н. По-долу е посочено описанието на всички колони на метатаблицата на теста.

Id Уникалният идентификатор за идентифициране на мета теста.
Идентификатор на теста Идентификаторът на теста за идентифициране на родителския тест/теста.
Ключ Ключът, идентифициращ мета.
Съдържание Колоната, използвана за съхраняване на метаданните на теста.

Мета таблицата на теста със съответните ограничения е както е показано по-долу.

CREATE TABLE `quiz`.`quiz_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`quizId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_quiz` (`quizId` ASC),
UNIQUE INDEX `uq_quiz_meta` (`quizId` ASC, `key` ASC),
CONSTRAINT `fk_meta_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Таблица с въпроси за тест

Таблица с въпроси от тест може да се използва за съхраняване на въпросите, свързани с тестове и викторини. По-долу е споменато описанието на всички колони на таблицата с въпроси за тест.

Id Уникалният идентификатор за идентифициране на въпроса за теста.
Идентификатор на теста Идентификаторът на теста за идентифициране на родителския тест/теста.
Тип Типът на въпроса. Типът може да бъде с един избор (да/не), с множество избори или избор. Можем също да имаме тип като вход и текстово поле, в случай че резултатът от теста се нуждае от ръчна проверка.
Активно Флаг, за да определите дали въпросът е активен. Тестът може да има няколко въпроса, но само избирателни въпроси остават активни в даден момент.
Ниво Нивото на въпроса, за да се определи дали е лесен, среден или труден.
Резултат Резултатът от индивидуален въпрос. Трябва да се уверим, че само селективните въпроси са активни в даден момент и общият резултат на активните въпроси е равен на резултата от теста, преди да публикуваме теста.
Създаден в Той съхранява датата и часа, в които е създаден въпросът.
Актуализирано в Той съхранява датата и часа, в които въпросът е актуализиран.
Съдържание Колоната, използвана за съхраняване на въпроса.

Таблицата с въпроси за тест със съответните ограничения е както е показано по-долу.

CREATE TABLE `quiz`.`quiz_question` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`quizId` BIGINT NOT NULL,
`type` VARCHAR(50) NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`level` SMALLINT(6) NOT NULL DEFAULT 0,
`score` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_question_quiz` (`quizId` ASC),
CONSTRAINT `fk_question_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Таблица с отговори на тест

Таблица с отговори на тест може да се използва за съхраняване на отговорите на въпроси с единичен избор, многократен избор и избор на тип. В случай на въпрос с един избор, отговорите могат да бъдат да и не. По-долу е посочено описанието на всички колони в таблицата с отговори на теста.

Id Уникалният идентификатор за идентифициране на отговора на теста.
Идентификатор на теста Идентификаторът на теста за идентифициране на родителския тест/теста.
Идентификатор на въпроса Идентификаторът на въпроса за идентифициране на родителския въпрос.
Активно Флаг, за да определите дали отговорът е активен.
Правилно Флаг, за да определите дали отговорът е правилен.
Създаден в Той съхранява датата и часа, в които е създаден отговорът.
Актуализирано в Той съхранява датата и часа, в които отговорът се актуализира.
Съдържание Колоната, използвана за съхраняване на отговора.

Таблицата с отговори на теста със съответните ограничения е както е показано по-долу.

CREATE TABLE `quiz`.`quiz_answer` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`quizId` BIGINT NOT NULL,
`questionId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`correct` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_answer_quiz` (`quizId` ASC),
CONSTRAINT `fk_answer_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `quiz`.`quiz_answer`
ADD INDEX `idx_answer_question` (`questionId` ASC);
ALTER TABLE `quiz`.`quiz_answer`
ADD CONSTRAINT `fk_answer_question`
FOREIGN KEY (`questionId`)
REFERENCES `quiz`.`quiz_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Вземете маса

В този раздел ще проектираме Take Table за проследяване на записването и времето на потребителските опити за тестовете. По-долу е посочено описанието на всички колони на Take Table.

Id Уникалният идентификатор за идентифициране на дублирането.
Потребителски идентификатор Потребителският идентификатор за идентифициране на участника на теста.
Идентификатор на теста Идентификаторът на теста за идентифициране на теста.
Състояние Състоянието на вземането. Може да бъде регистриран, стартиран, поставен на пауза, завършен, деклариран.
Резултат Общата оценка, получена от потребителя.
Създаден в Той съхранява датата и часа, в които е създаден дублирането.
Актуализирано в Той съхранява датата и часа, в които се актуализира дублирането.
Започна в Той съхранява датата и часа, в който е започнало заснемането.
Завършен в Той съхранява датата и часа, в които заснемането е завършено.
Съдържание Колоната, използвана за съхраняване на забележки за вземане.

Таблицата за вземане със съответните ограничения е както е показано по-долу.

CREATE TABLE `quiz`.`take` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`quizId` BIGINT NOT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`score` SMALLINT(6) NOT NULL DEFAULT 0,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`startedAt` DATETIME NULL DEFAULT NULL,
`finishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_take_user` (`userId` ASC),
CONSTRAINT `fk_take_user`
FOREIGN KEY (`userId`)
REFERENCES `quiz`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `quiz`.`take`
ADD INDEX `idx_take_quiz` (`quizId` ASC);
ALTER TABLE `quiz`.`take`
ADD CONSTRAINT `fk_take_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Вземете таблица с отговори

Таблицата с отговори може да се използва за съхраняване на отговорите, избрани от потребителя по време на теста. В случай на въпрос с множествен избор, може да има няколко отговора. По-долу е посочено описанието на всички колони на таблицата за вземане на отговори.

Id Уникалният идентификатор за идентифициране на отговора за вземане.
Вземете идентификатор Идентификаторът на вземане за идентифициране на опита за тест.
Идентификатор на отговора Идентификаторът на отговора за идентифициране на отговора на теста.
Активно Флаг, за да определите дали отговорът е активен.
Създаден в Той съхранява датата и часа, в които е създаден отговорът.
Актуализирано в Той съхранява датата и часа, в които отговорът се актуализира.
Съдържание Колоната, използвана за съхраняване на отговора в случай на въвеждане на въпроси или тип текстово поле.

Таблицата за вземане на отговори със съответните ограничения е както е показано по-долу.

CREATE TABLE `quiz`.`take_answer` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`takeId` BIGINT NOT NULL,
`questionId` BIGINT NOT NULL,
`answerId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_answer_take` (`takeId` ASC),
CONSTRAINT `fk_answer_take`
FOREIGN KEY (`takeId`)
REFERENCES `quiz`.`take` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `quiz`.`take_answer`
ADD INDEX `idx_tanswer_question` (`questionId` ASC);
ALTER TABLE `quiz`.`take_answer`
ADD CONSTRAINT `fk_tanswer_question`
FOREIGN KEY (`questionId`)
REFERENCES `quiz`.`quiz_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `quiz`.`take_answer`
ADD INDEX `idx_tanswer_answer` (`answerId` ASC);
ALTER TABLE `quiz`.`take_answer`
ADD CONSTRAINT `fk_tanswer_answer`
FOREIGN KEY (`answerId`)
REFERENCES `quiz`.`quiz_answer` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Резюме

В този урок обсъдихме дизайна на база данни на система за тестове за съхраняване на потребители, викторини, въпроси, отговори и опити за тестове под формата на дубли.

Можете да изпратите вашите коментари, за да се присъедините към дискусията. Може да се интересувате и от проектирането на базата данни на приложенията за блогове и анкети и анкети.

Пълната схема на базата данни е достъпна и на GitHub.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инсталирайте и конфигурирайте MySQL Workbench на Ubuntu 16.04

  2. Как да напиша съхранена процедура с помощта на phpmyadmin и как да я използвам чрез php?

  3. Най-добрият тип данни за съхраняване на валутни стойности в MySQL база данни

  4. Преглед на репликацията от клъстер към клъстер

  5. Синтаксис на SQL DROP DATABASE – Изброен от СУБД