当前位置: 首页 > 知识库问答 >
问题:

数据库结构、主键和外键

夏昊
2023-03-14

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

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

所以我的问题是:学校是否有可能在选定的城市中拥有从1到某物的id?还是像我在图中画的那样,它引用了所有学校的id列表,以及许多相互独立的id城市?

这是我的本意吗?我的设计是否如我所描述的那样正确?

共有2个答案

海景曜
2023-03-14

你的问题的最后一部分有点混乱,如果你能在这里发布你的示例模型,那会很有帮助。然而,你似乎走在正确的轨道上。截至目前,您的模型中似乎缺少“课程”表/实体。

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

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学校任教,会怎么样?如果这种关系仅通过特定的课程和学年,则它们可能属于课程表。

狄赞
2023-03-14

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

  • id字段可以由系统生成。如果为每个城市复制学校id值,则必须手动搜索用于特定城市的最后一个值,以便在该城市创建新学校
  • 学校的外键只需要一个字段,即学校id。否则,它们将需要学校id和城市id来引用特定的学校
  • 一所学校搬家是很罕见的,但也并非未知。要么学校搬迁,要么城市重新划定边界。这就增加了发生碰撞的可能性——比如说,如果101学校搬到一个已经有101学校的城市

因此,所有学校都应该有一个唯一的id,带有通往城市的FK。每个城市还应该有一个唯一的id,带有FK to状态。或者你可以把郡放在城市和州之间。

它不会影响您“深入”查找用户想要查看的学校的方法。你询问国家,然后用答案找到所有的城市。你询问城市并用答案找到所有学校。

 类似资料:
  • 本文向大家介绍数据库中主键和外键之间的区别,包括了数据库中主键和外键之间的区别的使用技巧和注意事项,需要的朋友参考一下 在关系数据库中,键是维护两个表之间的关系或从表中唯一标识数据的最重要元素。主键用于唯一地标识数据,因此两行不能具有相同的主键。不能为空。 另一方面,外键用于维护两个表之间的关系。一个表的主表充当另一个表中的伪造键。表中的外键强制引用完整性。该表中可以有多个。 序号 键 首要的关键

  • 如果需要在程序中 Dump 数据库的结构和数据可以调用 engine.DumpAll(w io.Writer) 和 engine.DumpAllToFile(fpath string)。 DumpAll 方法接收一个io.Writer接口来保存Dump出的数据库结构和数据的SQL语句,这个方法导出的SQL语句并不能通用。只针对当前engine所对应的数据库支持的SQL。 Import 执行数据库S

  • 关键数据结构 为了表示一个设备,需要有对应的数据结构,ucore为此定义了struct device,其描述如下: struct device { size_t d_blocks; //设备占用的数据块个数 size_t d_blocksize; //数据块的大小 int (*d_open)(struct device *dev, uint3

  • 我正在尝试在table of数据库与table of数据库之间创建外键: 用户id int(10)未签名的编号 Id int(10)无符号编号 我创建了查询 "外键约束格式错误"有人能帮助我如何实现这一点吗?

  • PHPSSO 数据库结构[更新日期:2010-12-28] 点击查看 PHPCMS 数据库结构[更新日期:2010-12-28] 点击查看

  • 问题内容: 如果我使用ID nr:s代替VARCHARS作为外键会更好吗?最好使用VARCHARS的ID nr:s istead作为主键吗?ID nr是指INT! 这就是我现在所拥有的: 我可能已经想到了: 还是我在这里认为完全错误? 问题答案: VARCHAR用于任何KEY的问题在于它们可以保留WHITE SPACE。空格由任何无法在屏幕上读取的字符组成,例如空格标签,回车符等。当您开始追查为什