设计数据库时,需要知道我是否正确地进行了操作

时间:2015-07-15 06:53:56

标签: sql database database-design relational-database

我有一个网站,我正在建立一个朋友的业务,我想知道如何存储数据。到目前为止,我已经设计了这个图。让我举个例子:

假设空手道锦标赛中有2个赛事:Sparring和Forms。每个赛事都有自己的分区:4到6岁的孩子,8-10岁的孩子,等等......每个学生都可以报名参加1场或者所有比赛。

我的问题是,下面的图片是否足以满足我在示例中解释的内容,减去基数。

我的第二个问题是,实际的数据库是什么样的?现在,我可以考虑添加以下表格:

  • 学生
  • 事件
  • student_divisions (student_id,division_id)这是对的吗?因为我需要能够将多个部门存储到一个学生

My ER Diagram

谢谢,任何帮助我成为更好设计师的指示都会有所帮助。

1 个答案:

答案 0 :(得分:2)

保持简单,让它变得有趣。

  • 失去" id" term(使其成为student_id或division_id或event_id)使用能够明确识别内容的术语。同样的" name" ..是student_name还是event_name?
  • 尽可能详细地列出每个学生(student_id,current_belt_ranking,date_of_birth( - > age),student_name。
  • 事件(event_name,division_id,日期,位置)(我做了key = event_name / division对)或替代" Sparing_8-10"," Forms_4-6&# 34;
  • 分部(分区ID,指示的其他内容)
  • 学生/事件表(student_id与event_name / division_id对匹配)

分析第一,第二,第三范式。

  • 第一范式(1NF):在普通英语中,没有数据行可以包含重复元素。记录类型的所有出现必须包含相同数量的字段。 ex(你不会把给定学生的事件放在学生表中注册。把这些东西放在一个单独的表中。)

  • 第二范式(2NF):简单来说,单行中是否有任何数据元素只依赖于连接主键的一部分?如果是这样,请将这些元素删除到另一个表中。 (例如:您在学生/活动表中没有学生姓名,年龄和日期_)<)>

  • 第三范式(3NF):表的每个非素数属性都是非传递性依赖于表的每个超级键。当非关键字段是关于另一个非关键字段的事实时,违反了3NF。(是的,甚至是有意义的吗?坦率地说,我不能用你的例子为你提供这样的例子......让我做一些研究......对于你的系统,我不认为有任何表格有大量的字段甚至接近这个违规。记住3NF处理与其他非相关的非关键字段-key fields。)

试一试,然后构建您的查询,看看它们是否有意义?