【问题标题】:Database structure, primary and foreign keys数据库结构,主键和外键
【发布时间】:2015-12-21 05:05:02
【问题描述】:

整个想法是建立一个网站,对来自全国所有城市和学校的教师进行评分。当用户进入网站时,他将有一个选项来选择城市。选择城市后,用户有机会选择该城市可用的学校。选择学校后,应显示教师列表。

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

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

真的是我的想法吗? 我是否按照我的描述正确设计了它?

【问题讨论】:

  • 你能插入你的图片,而不是链接到外部网站吗?
  • 对不起,我没有足够的声誉来做这件事。
  • 哦..好的。不用担心。我发布了一个带有一些指示的答案......希望对您有所帮助。祝你好运!
  • 如果在多个州有同名城市怎么办?他们能先选州,再选城市吗?
  • 没那么复杂,不是中国也不是美国:))

标签: database database-design


【解决方案1】:

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

  • id 字段可以由系统生成。如果您为每个城市重复学校 ID 值,则必须手动搜索用于特定城市的最后一个值才能在该城市创建新学校。
  • 学校的外键只需要一个字段,即学校ID。否则,他们将需要学校 ID 和城市 ID 来指代特定学校。
  • 很少有学校搬家,但并非不为人知。要么学校搬迁,要么城市重新划定边界。这增加了发生冲突的可能性 - 例如,如果学校 101 搬到一个已经有学校 101 的城市。

因此,所有学校都应该有一个唯一的 ID 和城市的 FK。每个城市还应该有一个唯一的 id 和一个 FK 到 State。或者,您可以将 County 放在 City 和 State 之间。

它不会影响您“向下钻取”以查找用户想要查看的学校的方法。您询问州并使用答案找到所有城市。您询问城市并使用答案找到所有学校。

【讨论】:

    【解决方案2】:

    您问题的最后一部分有点令人困惑,如果您可以在此处发布您的示例模型,那将会很有帮助。但是,您似乎走在正确的轨道上。到目前为止,您的模型中似乎缺少“课程”表/实体。

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

    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) 学校和老师也一样 - 老师可以与多个学校关联吗?如果老师今年在学校 x 和明年在学校 y 教书怎么办?如果这种关系只通过特定的课程和学年,它们可能属于课程表。

    【讨论】:

    • 对不起,如果我没有把自己说清楚。在我绘制表格之前很清楚,我认为每个学校都应该在每个城市都有自己的 id。示例:假设每个城市有 10 所学校。纽约的所有学校都应该有 1 到 10 的 id。芝加哥的所有学校都应该有 1 到 10 的 id。它可能不这样工作,但不知何故我感到困惑。谢谢你的回答!
    • 每个其他属性都有一个唯一的 id 本身并没有错。 (尽管大多数 SQL DBMS 并不容易做到这一点。)虽然这里每个城市的 id 并不是表征学校的自然方式。 “学校”的任何含义都适用:例如,此答案表明可能有两个不同的概念需要两个不同的词/短语:学校组织和学校分支。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多