sql数据库中同一字段怎么添加多个外键约束呀 ? 具体如图 谢谢大神啦

嗯,我看了一下这份成绩单。
学号和课程号是外键,分别指向学生表和课程表。
这没有问题。

约束条件pk_学号_课程号primarykeyclustered(学号,课程号),这个聚集索引是根据学号和课程号建立的。
仔细想想,学生号和课程号组合起来作为主键,这样每个学生每门课程的成绩都是唯一的。
这样的设计是合理的。

外键约束fk_student number和fk_course number分别指向student表的学号和课程表的课程号。
这没有问题。

那是成绩字段,grade realnull。
您没有在这里给出成绩非空约束。
一般来说,成绩表中的成绩应该是非空的,应该写成grade real not null。
当然,如果你确实想允许空结果,那也可以,具体取决于你的业务需求。

总体来说,表结构设计得很好。
也就是分数允许为空,所以请注意这一点。

数据库外键约束是什么?外键的作用、创建及使用详解

嘿嘿,外键实在是太多了,就不多说了。
我给大家讲讲我遇到的真实情况。

前年我在上海做一个电子商务项目。
在设计数据库表时,客户ID和订单ID之间的关系尤为重要。
直接使用外键约束创建订单表。
其中有一个客户 ID 字段,与客户表中的 ID 直接相关。
结果呢?后来我发现有用户抱怨,有时候当一个客户被删除后,orders表中的客户ID还是一样的,但是客户却消失了,这看起来很奇怪。
因此ON DELETE CASCADE必须谨慎使用,否则可能导致数据连接中断。

另一方面,去年我在深圳参与了另一个项目。
有一个库存系统,并将外键添加到产品表和订单详细信息表中。
产品表中的产品ID为主键,订单明细表中的产品ID为外键。
当时的业务需求是产品不能简单地删除,即使它们在订单中使用过。
我添加了删除限制。
因此,在一次系统测试时,我想删除一些测试订单,但发现这些明细无法删除,因为产品表中的产品ID仍然是链接的。
这有点烦人,测试效率低。

所以你看:外键用得好,数据一定稳定。
但是,如果使用不当,例如B.有循环引用,或者业务场景不适合,就会出现问题。
例如,我看到两个表互相添加外键。
A指B,B指A,过程复杂,容易卡壳。

在索引外键列时我也遇到了问题。
数据迁移过程中没有在外键列上创建索引。
这使得数据导入极其缓慢。
想一想:每次导入订单数据时,首先需要在Customers表中找到对应的ID。
如果没有索引,则必须扫描整个表。
那有多快?后来我加了索引,立刻就快了。
因此,如果读写频繁,则需要对外键列建立索引。

命名也很重要。
我之前有一个项目。
表太多,外键约束没有命名。
改变它们就像拆掉一座房子并寻找联系。
后来标准化了,命名和父表、子表的字段挂钩,维护起来方便很多。

总的来说,外键是个好东西,可以保证数据不乱。
但具体使用情况取决于业务场景。
有时在应用程序级别检查是可以的,这取决于情况。
不要只关注数据库限制,业务逻辑也需要跟上。

如何使用navicat给数据库表添加外键约束

步骤如下: 1 .登录数据库,右键单击表名,选择“设计表”。
2 . 切换到“外键”选项卡。
3 . 指定外键字段并选择引用的表和字段。
4 . 设置删除/更新行为(CASCADE/RESTRICT)。
5 . 保存。

实用提醒:连接前测试约束效果。