public 学校系统的 ER 图

ER diagram for public school system

我有这些要求:

  1. 对于每所学校,系统需要跟踪其唯一的名称、地址、分类(值可以是小学、初中或高中),以及就读的学生人数。
  2. 对于每个学校系统员工,我们需要跟踪唯一的员工编号、全名、地址、薪水以及他工作的学校。一个人只能在一所学校工作。
  3. 对于每个学生,我们都会记录学生的姓名(有时,我们需要分别提及学生的名字、中间名首字母和姓氏)、地址(有时,我们需要提及街道)地址、城市、州和邮政编码)、他就读的学校以及他所在的年级。
  4. 系统经常向高中生发送信件,因此,需要跟踪每个高中生以及他(她)入读高中的年份。
  5. system-wide 提供的课程列表已保留。有关课程的信息包括其唯一编号、唯一标题和学分数。
  6. 对于每所学校,都保留了有关在那里教授哪些课程的信息。
  7. 对于每个学生,我们保留一份成绩报告,其中提供学生在特定课程中的成绩(值可以是 A、B、C、D 或 F)。
  8. 学校系统拥有由注册号唯一标识的公交车。一些学生带着它们往返于家和学校之间,而另一些学生则使用个人方式上下班。我们跟踪哪个学生乘坐哪辆公共汽车上下班。我们还跟踪分配给公共汽车的 drivers(一个 driver 是学校系统的员工,可以分配给多辆公共汽车,一辆公共汽车可以分配多个 drivers –考虑这是每周分配的公共汽车和 drivers)。

这是我对 ER 设计的尝试:

这是我的第一个 ER 设计,我只是想知道是否满足所有要求,是否正确?任何帮助都感激不尽!谢谢!

首先,我不喜欢省略外键所需的列,例如员工 table 中的学校 ID。但我对 ER 图的了解还不够多,无法说明是否允许这样做。

我觉得这张图不错。不过有几点:

  1. 学校名称可以更改。如果有可用的数字系统(例如美国的 NCES 学校 ID),我会将其设为 PK。
  2. 学生人数必须在学校没有列table;每所学校的学生人数由与学校相关的学生隐式给出。
  3. 我不太喜欢1:1关系。 Student <-> High Schooler 没问题,但我宁愿在学生 table.
  4. 中输入入学日期
  5. 仅凭 StudentID 无法确定成绩 table 的 PK。必须改为 StudentID + Course#。
  6. 从学生到课程的线是多余的,因为关系已经由成绩 table 给出(这是一个包含 StudentID、Course# 和可选成绩的桥梁 table)。
  7. 课程 table 的 PK 不能是课程# + 标题,因为这意味着相同的课程编号可以与不同的标题组合使用。 PK 应该是单独的课程编号。至于关系:我不知道同一门课程是否可以在不同的学校教授。如果是这样,则关系正确。
  1. 认识了。 (虽然我会把公寓地址分成# StreetAddress、邮政信箱、城市、州邮政编码等(假设是美国),但如果你想要额外的信用,你可以将地址子类型化为他们自己的 table 并且只需让员工,学生和学校地址合二为一 table 外键...

  2. 我会像习惯一样分解姓名、地址 最小公分母:Fname、LName 等...(用于缩放 长期解决方案;合并数据很容易,以后再分解 很难)

  3. 看起来不错
  4. 成绩不就是高中吗?第 9 个 年级生在高中吧?那么为什么要单独 table 呢? 4.1) 现在 table 列出了发送给哪些学生的信件可能会有用......但他们没有说他们需要这个所以我会寻求对要求的澄清。
  5. 如果#是独一无二的标题就不需要参与 的关键。
  6. 缺少(你需要的学校课程table)
  7. 失踪(我想可以通过你的成绩 table 来处理)我打电话给 table 学生课程并在 table 上保持成绩......然后是的它有效。
  8. Associative/Junction table 在 bus/student 和 bus/employee 之间 需要

整体 many-to-many 需要作为建模的一部分来解决。我同意 Thorsten 的观点,我想查看所有 table 中的所有字段,包括 FK,我已经做了足够多的工作,知道 CASE 工具允许它。

虽然 1-1 关系看起来适合 4/5 范式。它们通常不再实用,除非真正代表一个单独的概念。所以我可能有一个车辆 table 用于车辆数据库,但我也可能有一个 table 用于汽车属性与摩托车属性与卡车与船等......但在这种情况下车辆是主要的所以没有理由将高中分开我只是看不到保持 object 分开的长期价值(但也许我只是缺乏远见)。

您将了解到,在 ERD 中,数据之间关系的基数是最重要的(遵循 datatype/size/scale 精度)。消除 M-M 关系是必须的。当你完成后,一切都归结为 1-M 或 1-1。

不确定 school/bus 之间的线意味着什么......总线由整个系统拥有......也许你需要一个 "System" table 绑定到学校和公共汽车到系统。这样,如果您支持多个学校系统,您就知道哪些公交车属于哪个系统,哪些学校属于哪个系统...