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

有没有更好的方法来处理我的MySQL数据库表?,mysql,database,Mysql,Database,我的网站允许人们制作测验。每个测验最多包含20个问题,每个问题最多包含5个答案。我有一个用于测验、问题和答案的数据库表。这意味着一个测验可以有121行。有没有更好的方法来处理这个问题,例如在问题表中的一个单独的列中包含测验答案?使用默认的InnoDB引擎-一行会增加大约20字节的开销。这对于一百万行来说大约是20MB,如果组织和索引良好的话,这对于现代硬件来说几乎算不上什么。即使你使用智能手机作为服务器,你也应该很好 但是,每个实体应至少使用一个表。测验、问题和答案是不同的实体——所以你至少应该

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

使用默认的InnoDB引擎-一行会增加大约20字节的开销。这对于一百万行来说大约是20MB,如果组织和索引良好的话,这对于现代硬件来说几乎算不上什么。即使你使用智能手机作为服务器,你也应该很好

但是,每个实体应至少使用一个表。测验、问题和答案是不同的实体——所以你至少应该有三个表,它们由外键链接

下面是一个规范化模式的示例:

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)
);

您可以共享您的表模式吗?我不确定你如何在一次测验中得到131行,因为20*5只有100行,从你的帖子中也不清楚db是如何设置的。有没有更好的方法来处理这个问题,比如在问题表的单独一列中列出测验答案?->您不想将行转换为列相信我,以后您会遇到麻烦。作为基本的一般规则:如果a可以有多个B,那么a和B应该是单独的表。更正后的行数表明您处理得很好。您应该有3个表格:测验、问题和答案。问题有一个外键用于测验,答案有一个外键用于提问。阅读关于数据库规范化的教程。