【问题标题】:Designing a database, need to know if I'm doing it correctly [closed]设计数据库,需要知道我是否正确[关闭]
【发布时间】:2015-07-15 15:40:37
【问题描述】:

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

假设空手道比赛中有 2 项赛事:陪练和形式。每个活动都可以有自己的部门:陪练 4-6 岁、陪练 8-10 岁等......每个学生都可以报名参加一项或所有活动。

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

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

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

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

【问题讨论】:

  • 我会从使用 UML 图而不是流程图开始。
  • 这是一个 ER 图。
  • 一个学生可以参加多个部门的比赛吗?
  • 是的,每个项目一个部门,所以如果学生年满 8 岁,他们可以参加 8-10 级陪练和 8-10 级的比赛
  • this recent answer的后半部分。

标签: sql database database-design relational-database


【解决方案1】:

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

  • 丢失“id”术语(将其设为 student_id 或 division_id 或 event_id) 使用能够真正明确所识别内容的术语。 “姓名”也一样。是学生名还是事件名?
  • 尽可能详细地说明每个学生(student_id、current_belt_ranking、date_of_birth (--> age)、student_name。
  • 事件(event_name、division_id、date、location)(我会设置 key = event_name/division 对)或替代“Sparing_8-10”、“Forms_4-6”
  • 部门(部门 id,其他内容如所示)
  • student/events 表(student_id 与 event_name/division_id 对匹配)

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

  • 第一范式 (1NF):在简单的英语中,任何数据行都不能有重复元素。记录类型的所有出现必须包含相同数量的字段。例如(您不会将给定学生注册的事件放在学生表中。将这些东西放在单独的表中。)

  • 第二范式 (2NF):简单来说,单行中是否有任何数据元素仅依赖于连接主键的一部分?如果是这样,请将这些元素删除到附加表中。 (例如:学生/事件表中不会有学生姓名、年龄和 date_of_birth...)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2022-01-05
    • 2013-05-22
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多