数据库结构,主键和外键

时间:2015-09-23 18:37:41

标签: database database-design

整个想法是建立一个网站,对全国所有城市和学校的教师进行评分。当用户进入网站时,他将有一个选择城市的选项。在选择城市之后,用户有机会选择该城市中可用的学校。选择学校后,应出现教师名单。

我想制作城市,学校和教师的表格。 城市将城市名称和CID作为主键。 学校应将学校名称SID作为主键,将CID作为外键。 最后,教师表将具有教师的姓名,教师的ID CID和SID作为外键。

所以我的问题是:学校是否有可能在所选择的城市拥有从1到某事物的身份?或者它是否引用了所有学校的ID列表,以及我在图片中绘制的许多id的城市彼此独立?

enter image description here

我属于你吗? 我是否按照我的描述正确设计了它?

2 个答案:

答案 0 :(得分:1)

最好的选择是让每所学校都有一个唯一的ID。有几个优点:

  • id字段可以是系统生成的。如果您复制每个城市的学校ID值,则必须手动搜索特定城市的最后一个值,才能在该城市中创建新学校。
  • 学校的外国钥匙只需要一个领域,即学校。否则,他们需要学校ID和城市ID来指代某个特定的学校。
  • 学校搬家的情况很少但并不为人所知。无论是学校搬迁还是城市重新划分界限。这开启了碰撞的可能性 - 例如,如果学校101迁移到已经拥有学校101的城市。

因此,所有学校都应该拥有一个与城市FK相同的唯一身份证。每个城市也应该有一个唯一的ID与FK到州。或者你可以将郡放在城市和州之间。

它不会影响您“钻取”以查找用户想要查看的学校的方法。你要求国家并使用答案找到所有城市。您要求城市并使用答案找到所有学校。

答案 1 :(得分:0)

你问题的最后一部分有点令人困惑,如果你可以在这里发布你的样本模型,那将会有所帮助。但是,你似乎走在了正确的轨道上。 "课程"截至目前,您的模型中似乎缺少表/实体。

而不是网站上的用户操作,请考虑这里不同/独特的逻辑事物。

1) City   (or location) - city_id (pk), city_name...
2) School               - school_id(pk), city_id(fk), school_name...
3) Teacher              - teacher_id(pk), school_id(fk), teacher details..
4) Course               - course_id(pk), teacher_id(fk), school_id (fk)

在您决定使用此模型之前,还有一些其他事项需要考虑。

1)学校是否有可能在不同的城市设立分支机构?如果是这样,您应该有一个school_city_association表,该表具有学校和分支机构之间的多对多关系。

2)与课程类似的案例 - 课程是否可以有多个教师,在这种情况下,您将拥有一个具有多对多关联的新表。

3)学校和老师也一样 - 教师可以与多所学校联系吗?如果老师今年在学校和明年的学校教学怎么办?如果这种关系只是通过特定的课程和学年,他们可能属于课程表。