将数据放入规范化数据库中

时间:2015-12-06 19:06:45

标签: php mysql sql database mysqli

我正在构建一个数据库系统,用户可以对自己可以创建的问题进行投票。我正在努力的是正确地填充数据库,特别是因为我已经尝试了规范化它并且它让我很困惑!我是SQL和MySQLi的新手。

在下面的数据库中,当一个人在我的网页上创建个人资料然后再次使用该信息时,如果我想将他们的UserID与QuestionID和Up-或他们做出了低票?

Database system for voting, users and question.

我正在寻找有关数据库设计的帮助,但特别有助于我将数据放入数据库并将其“捆绑”在一起的问题。

1 个答案:

答案 0 :(得分:2)

我尝试更简单的方法,一次一步地将其标准化。

用户表格不错

create table users (
  userid int not null auto_increment primary key,
  email varchar(100) not null,
  password varchar(255) not null
);

问题表

我只是在问题表中标记出问题的人是否以

开头
create table questions (
  questionid int not null auto_increment primary key,
  question mediumtext or whatever,
  userid int not null,
  add fk here for userid
);

问题投票 - 多对多/联合表

create table question_votes (
  question_votesid int not null auto_increment primary key,
  questionid int not null,
  voterid int not null,
  votedate timestamp not null default current_timestamp,
  score int not null,
  add fk here for questionid and voterid
);

答案表

create table answers (
  answerid int not null auto_increment primary key,
  answer mediumtext or whatever,
  questionid int not null,
  userid int not null,
  add fk here for questionid, userid
);

您可以选择创建仅包含答案的答案,以及一个名为question_answers的联结表,其中包含questionid,answerid列。您还可以选择将question_userid和answer_userid放在此表中。阅读最后一段以获得答案。

回答投票表

create table answer_votes (
  answer_votesid int not null auto_increment primary key,
  answerid int not null,
  voterid int not null,
  votedate timestamp not null default current_timestamp,
  score int not null,
  add fk here for answerid and voterid
);

将一些虚拟数据放入其中并开始问自己问题 - 我需要哪些信息。如果X发生了怎么办这个架构可以适应我将在X发生的时候被问到的答案吗?等

当你通过头脑中的Q& A时,你会发现你应该在哪里正常化以及在何种程度上。