如何设置一个表的外键值必须与另一个表相同

希伯斯

例如,我有4张桌子,即Student,School,Tour和TourAttend。游览是在学校的基础上进行的,同一游览中绝不会有来自多所学校的学生。

学校

SchoolID主键
SchoolName

学生

StudentID主键
SchoolID外键
StudentName

旅游

TourID主键
TourName

巡回赛

TourAttendID主键
TourID外键
StudentID外键

价值的例子

Student      School      
Student1    School1    
Student2    School1     
Student3    School2  

我如何确保参加同一学校的一次旅行的学生,这意味着如果来自school1的学生参加了旅行,school2无法参加该旅行?

Damien_The_Unbeliever

正如我在评论中所说,您可以通过SchoolID在当前缺少的表中添加该来实现此目的

CREATE TABLE Tour (
    TourID tinyint not null,
    TourName varchar(37) not null,
    SchoolID bigint not null,
    constraint PK_Tour PRIMARY KEY (TourID),
    constraint FK_Tour_School FOREIGN KEY (SchoolID) references School (SchoolID),
    constraint UQ_Tour_School UNIQUE (TourID, SchoolID)
)

所以,现在,在你的叙述,每个旅游与相关的单一学校。很好,现在出席率如何?

CREATE TABLE TourAttend (
    TourAttendID smallint not null,
    TourID tinyint not null,
    StudentID char(1) not null,
    SchoolID bigint not null,
    constraint PK_TourAttend PRIMARY KEY (TourAttendID),
    constraint FK_TourAttend_Tour FOREIGN KEY (TourID)
          references Tour (TourID),
    constraint FK_TourAttend_Student FOREIGN KEY (StudentID)
          references Student (StudentID),
    constraint FK_TourAttend_XRefTour FOREIGN KEY (TourID,SchoolID) 
          references Tour (TourID, StudentID),
    constraint FK_TourAttend_XRefStudent FOREIGN KEY (StudentID, SchoolID) 
          references Student (StudentID, SchoolID)
)

(你也许会需要添加唯一约束的Student表,跨越StudentIDSchoolID,以同样的方式和我一样在Tour上面,形成上述前FK_TourAttend_XRefStudent外键)。

您现在有一些多余的外键约束,但是我经常将它们留在原处,仅用于记录目的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何按另一个表中的外键值的数量对一个表进行排序?

来自分类Dev

如何添加具有引用laravel中另一个表的外键值的表?

来自分类Dev

如何在一个表的第3列中显示所有数据,其中第4列包含与另一个表相同的ID?

来自分类Dev

如何设置外键在另一个表中抢行?Laravel 8调试

来自分类Dev

如何将现有字段设置为另一个表的外键?

来自分类Dev

如何创建与另一个表相似的表,而不在创建时复制数据?

来自分类Dev

与另一个表相比,如何在表中找到额外/不同的行?

来自分类Dev

Ruby on Rails-如何在一个模型中向另一个模型显示外键值

来自分类Dev

Laravel中从一个表到另一个表中相同字段的多个外键

来自分类Dev

创建另一个相同数组的数组 - 只有一个键值。PHP

来自分类Dev

如何将主键值从一个表保存到另一个表?

来自分类Dev

如何检查Java哈希表是否包含来自另一个哈希表的键值对

来自分类Dev

将列代码设置为表上的外键,并引用另一个表

来自分类Dev

删除列表中的重复项,并检查其是否与另一个列表相同

来自分类Dev

如何从一个表中选择另一个表中没有外键的记录

来自分类Dev

检查一个表的ID是否用作另一个表的外键

来自分类Dev

更新一个表中的主键,而另一个表中的外键

来自分类Dev

如何将主键值插入另一个表的主键?

来自分类Dev

从一个表中选择数据并为主“键”连接另一个表相当慢

来自分类Dev

根据某些条件从一个与另一个表相关的表中检索记录

来自分类Dev

Oracle SQL从一个表中选择与另一个表相关的数据

来自分类Dev

如何为一个类型设置约束,使其必须为另一个泛型类型

来自分类Dev

基于数组中的一个键值如何找到另一个键的值?

来自分类Dev

Postgres:如何从另一个表插入并在此后的行中设置外键?

来自分类Dev

如何用另一个表的所有列的相同数据类型创建一个表?

来自分类Dev

根据另一个对象的键值获取键值

来自分类Dev

在另一个表中的一个表中设置值

来自分类Dev

如何过滤std :: list并删除与另一个列表相比不匹配的项目?

来自分类Dev

MySQL如何使用外键来识别另一个表中的列?

Related 相关文章

  1. 1

    如何按另一个表中的外键值的数量对一个表进行排序?

  2. 2

    如何添加具有引用laravel中另一个表的外键值的表?

  3. 3

    如何在一个表的第3列中显示所有数据,其中第4列包含与另一个表相同的ID?

  4. 4

    如何设置外键在另一个表中抢行?Laravel 8调试

  5. 5

    如何将现有字段设置为另一个表的外键?

  6. 6

    如何创建与另一个表相似的表,而不在创建时复制数据?

  7. 7

    与另一个表相比,如何在表中找到额外/不同的行?

  8. 8

    Ruby on Rails-如何在一个模型中向另一个模型显示外键值

  9. 9

    Laravel中从一个表到另一个表中相同字段的多个外键

  10. 10

    创建另一个相同数组的数组 - 只有一个键值。PHP

  11. 11

    如何将主键值从一个表保存到另一个表?

  12. 12

    如何检查Java哈希表是否包含来自另一个哈希表的键值对

  13. 13

    将列代码设置为表上的外键,并引用另一个表

  14. 14

    删除列表中的重复项,并检查其是否与另一个列表相同

  15. 15

    如何从一个表中选择另一个表中没有外键的记录

  16. 16

    检查一个表的ID是否用作另一个表的外键

  17. 17

    更新一个表中的主键,而另一个表中的外键

  18. 18

    如何将主键值插入另一个表的主键?

  19. 19

    从一个表中选择数据并为主“键”连接另一个表相当慢

  20. 20

    根据某些条件从一个与另一个表相关的表中检索记录

  21. 21

    Oracle SQL从一个表中选择与另一个表相关的数据

  22. 22

    如何为一个类型设置约束,使其必须为另一个泛型类型

  23. 23

    基于数组中的一个键值如何找到另一个键的值?

  24. 24

    Postgres:如何从另一个表插入并在此后的行中设置外键?

  25. 25

    如何用另一个表的所有列的相同数据类型创建一个表?

  26. 26

    根据另一个对象的键值获取键值

  27. 27

    在另一个表中的一个表中设置值

  28. 28

    如何过滤std :: list并删除与另一个列表相比不匹配的项目?

  29. 29

    MySQL如何使用外键来识别另一个表中的列?

热门标签

归档