对下面这句话的理解:不得使用外键与级联,一切外键概念必须在应用层解决

梦回的承诺 2019-08-05 05:23:55
对于下面这个问题,如果要在应用层解决,如何解决?
问题:以学生和成绩的关系为例,学生表中的 student _ id 是主键,那么成绩表中的 student _ id
则为外键。如果更新学生表中的 student _ id ,同时触发成绩表中的 student _ id 更新,即为
级联更新
...全文
871 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfang 2019-08-06
  • 打赏
  • 举报
回复
学生成绩表中当然要有学生的id,否则成绩是谁的 。这个是逻辑外键 数据库外键(有时也被称为物理外键)和逻辑外键是不同的含义,你仔细阅读一下1楼引用的文章了解数据库外键的功能。 不得使用外键与级联,是指数据库外键 数据库外键会增加一系列的校验逻辑,比如不能插入不存在的student_id,就是为什么要引用一个文章,让你去了解外键相关的sql指令
梦回的承诺 2019-08-06
  • 打赏
  • 举报
回复
引用 1 楼 tianfang 的回复:
https://www.jianshu.com/p/394f8aa724f4 外键的SQL是: ADD CONSTRAINT FK_字段名 FOREIGN KEY(字段名) REFERENCES 关联的表名(关联的字段名) 不用外键,就是在建表的时候 不要上述sql 应用层解决,就是在java代码处理,一般orm时候,成绩对象中就包含学生对象
具体可以详细解释下吗,比如我说的例子,不用外键,那按你的说法就是,一个学生表,一个学生成绩表, 学生成绩表中没有学生的id,那在应用层中,orm中学生成绩表中包含一个学生的对象,插入数据时,保存这条成绩信息, 难道就要把整个学生对象也保存进去,不然学生成绩和学生信息如何关联
雾里看花の 2019-08-06
  • 打赏
  • 举报
回复
这话的意思是可以有外键,但是不能在sql中直接体现,只要知道是外键就可以了
tianfang 2019-08-05
  • 打赏
  • 举报
回复
https://www.jianshu.com/p/394f8aa724f4 外键的SQL是: ADD CONSTRAINT FK_字段名 FOREIGN KEY(字段名) REFERENCES 关联的表名(关联的字段名) 不用外键,就是在建表的时候 不要上述sql 应用层解决,就是在java代码处理,一般orm时候,成绩对象中就包含学生对象

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧