create table polls (
id integer not null auto_increment primary key,
created datetime,
modified datetime
);
create table quizzes (
id integer not null auto_increment primary key,
created datetime,
modified datetime
);
create table questions (
id integer not null auto_increment primary key,
model varchar(255) not null, -- Poll or Quiz, in this scenario
foreign_key integer not null,
question varchar(255) not null,
created datetime,
modified datetime
);
create table answers (
id integer not null auto_increment primary key,
question_id integer not null,
answer varchar(255) not null,
created datetime,
modified datetime
);
对于民意调查和测验表,任何人都可以使它更简单(更短)且更有意义吗?
这是另一个想法,哪个更好? =>
| polls | CREATE TABLE `polls` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`question` varchar(300) NOT NULL,
`mark` tinyint(4) NOT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
| pollanswers | CREATE TABLE `pollanswers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`poll_id` int(11) NOT NULL,
`answer` varchar(300) NOT NULL,
`percentage` int(11) NOT NULL,
`correct` tinyint(4) NOT NULL,
`mark` tinyint(4) NOT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
答案 0 :(得分:2)
首先,始终以单数形式命名表格。这是因为“表定义”实际上是每行的定义 - 一个行(即单数)。此外,它更自然地读取:quiz.id
有意义 - 测验的ID,但quizzes.id
是什么?测验的ID?否。
要回答您的问题,您一定要将民意调查和测验合并到一个表中。提示是他们有相同的定义。如果你需要区分这两者,有一个布尔列。我们称之为测验。
您还应将外键命名为“table_id”,例如“quiz_id”。
你应该给你的测验命名。
在mysql中,每当您更改行中的某些内容时,timestamp
数据类型会自动更新。它非常方便 - 保存为每个更新/插入值集添加now()
。
恕我直言,你的桌子应该是:
create table quiz (
id integer not null auto_increment primary key,
created datetime,
modified timestamp,
name text,
is_poll boolean not null default false
);
create table question (
id integer not null auto_increment primary key,
quiz_id integer not null references quiz,
question varchar(255) not null,
created datetime,
modified timestamp
);
create table answer (
id integer not null auto_increment primary key,
question_id integer not null references question,
answer varchar(255) not null,
created datetime,
modified timestamp
);
答案 1 :(得分:0)
是的,这是一个完美的组织。唯一的问题是,您可以在民意调查和测验表中保存“已创建”和“已修改”字段,只留下“问题”,并且只有在“民意调查”或“测验”同时插入“问题”时才会这样。 ....
对我而言,看起来像是太多的日期字段。我不会使用它们,但你放的组织是有效的。如果您要发布此问题的数据使用情况,我们可以发表更多评论。