需要建议:mysql数据库结构

时间:2010-11-23 14:47:28

标签: mysql database normalization

另一个数据库结构问题,希望你们不要介意:D

我正在网上进行这个视频测验,有这样的流程:

  1. 观众将观看视频
  2. 该特定视频附有问题
  3. 它还有2个问题,其中一个是假的,当然另一个是真的
  4. 到目前为止,我已经找到了两个数据库设计

    第一个是:

    table: video 
    fields: id, filename, type, size, created
    
    table: question 
    fields: id, question, right_answer, wrong_answer, video_id
    

    第二个,我在每个不同的表格上分离问题和答案

    table: video 
    fields: id, filename, type, size, created
    
    table: question 
    fields: id, video_id, question
    
    table: answer
    fields: id, answer, video_id, status
    

    答案表中的状态字段用于指示答案是对还是错,可能使用tinyint的值为0和1

    你们哪个人会推荐我作为更好的方法和原因,因为我并不真正理解数据库规范化,是否有任何易于理解的文章,以便我可以提高我的知识,任何帮助都会很多谢谢,谢谢

    此致

    更新

    谢谢大家为我的数据库设计指出一个更好的方法,因为每个人都建议我应该使用boolean或bit作为字段类型,我总是在之前使用tinyint用于这样的字段:p,所以我搜索一下解决我应该在mysql中使用什么类型来表示布尔值,我偶然发现这个Which MySQL Datatype to use for storing boolean values from/to PHP?并根据该问题的答案我应该使用tinyint(1),所以我想我可以保持这样做是安全的现在使用tinyint:p

    再次感谢所有人

3 个答案:

答案 0 :(得分:2)

原谅ASCII,我建议如下:

VIDEO                Question             Answer
|- id       1--.     |- id       1--.     |- id
|- filename     '--* |- video_id     '--* |- question_id
|- type              '- question          |- answer
|- size                                   '- correct (bit, not tinyint)
'- Created

这使您可以自由地在视频上添加多个问题,并为每个问题提供多个答案。另外,我建议使用一点(不是tinyint)来标记“正确”答案。我还试图展示在这种情况下密钥是如何对齐的。

答案 1 :(得分:1)

直观地说,我会选择第一个解决方案,因为您很可能需要同时检索这两个问题。

顺便说一句,如果你选择第二个选项,那么我会建议你为“status”字段使用一个布尔值,而不是一个tinyint。

答案 2 :(得分:0)

如果您打算添加更多答案,请采用第二种方式,否则请使用第一种方式。