mysql - 有没有更好的方法来处理我的 MySQL 数据库表?

标签 mysql database

我的网站允许人们创建测验。每个测验最多包含 20 个问题,每个问题最多包含 5 个答案。我有一个用于测验、问题和答案的数据库表。这意味着一项测验可以有 121 行。有没有更好的方法来处理这个问题,例如将测验答案放在问题表的单独列中?

最佳答案

使用默认的 InnoDB 引擎 - 一行会增加大约 20 个字节的开销。 100 万行大约需要 20 MB,如果组织和索引得当,这对于现代硬件来说根本不算什么。即使您使用智能手机作为服务器,也应该没问题。

但是,每个实体至少应该使用一个表。测验、问题和答案是不同的实体 - 因此您应该至少有三个表,它们通过外键链接。

这是规范化架构的示例:

create table quizzes(
    quiz_id int unsigned auto_increment primary key,
    title varchar(255)
);

create table questions (
    question_id int unsigned auto_increment primary key,
    quiz_id int unsigned not null
    title varchar(255),
    foreign key (quiz_id) references quizzes(quiz_id)
);

create table answers (
    answer_id int unsigned auto_increment primary key,
    question_id int unsigned not null
    title varchar(255),
    foreign key (question_id) references questions(question_id)
);

关于mysql - 有没有更好的方法来处理我的 MySQL 数据库表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49657711/

相关文章:

android.database.sqlite.SQLiteException : no such column: personname: , 同时编译 : SELECT id, personname FROM numbersTable

database - 如何获得以微秒为单位的时差以测量 postgresql 中的总查询时间?

php - MySQL如何处理大表? (游戏的数据库设计)

mysql - 什么是 MYSQL 分区?

mysql - 如何在 Apache Tomcat 7 中设置 JDBCRealm?

MySQL - 如何按相关性排序? INNODB 表

MySQL 列;在结果集中分成两部分

python - 具有三层深度嵌套模型的查询集过滤器(多个一对多关系)

database - 连接到 SQLDeveloper 的供应商代码 17002

php - sql - BETWEEN timeframes with a weird timestamp