getRoot()这句不是很明白

getRoot()这句不是很明白

ALTER TABLE cake ADD CONSTRAINT FK_Reference_1 FOREIGN KEY(cid) REFERENCES catalog(id) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE catalog ADD CONSTRAINT FK_Reference_2 FOREIGN KEY(pid) REFERENCES catalog(id) ON DELETE RESTRICT ON UPDATE RESTRICT;
数据库的设计和使用上逻辑有点看不明白,根据数据库上面两句语言的意思,在业务上是不是可以这样理解:

一:catalog(id)有两个子类,一个是catalog(pid),另一个是cake(cid)

二:getRoot()使用catalogDao.select(10000);为什么选择第一个id(10000)就得到了根?,如果后续id出现了11000,那么catalogDao.select(10000)还能得到跟吗?

三:root.child是catalog(pid),root.child.child是cake(id)。这样理解对吗?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好!

  1. 首先pid是指某个分类的父id,并不会出现直接根据pid查询分类

  2. 查询时通常都是根据id查询分类,然后pid=id,去查询这个id下面的子分类哦~所以不会出现直接使用pid查询的呢,pid的作用是用来根据pid=id查询子分类的

如果我的回答解决了你的疑惑,请采纳,祝学习愉快

  • 慕码人5437048 提问者 #1
    明白了,这个表单类似于bom表单的数据库结构
    2019-11-15 19:23:34
好帮手慕柯南 2019-11-15 17:25:40

同学你好!

同学可以按照以下思路理解哦~

  1. 下面这个sql的意思是:

    给cake表中的cid字段添加外键,与catalog表中的id关联(也就是cake表中的cid字段与catalog表中的id字段匹配)

    http://img1.sycdn.imooc.com//climg/5dce6b7e09f0611511700111.jpg

    给catalog表中的pid字段添加外键,与catalog表中的id关联(也就是catalog表中的pid字段与catalog表中的id字段匹配)主要是用来表示层级关系

    http://img1.sycdn.imooc.com//climg/5dce6c9009dd1d2a11570096.jpg

  2. catalog(id)不存在子类呢,不建议同学这么理解

  3. getRoot()使用catalogDao.select(10000),其实是我们自己设置好的,其它的id不会影响到它,在数据库中id=10000的数据,是没有pid的,它不属于任何一个分类的下面,因此它就是最外层的那个分类。getRoot()就是获取最外层的分类

    http://img1.sycdn.imooc.com//climg/5dce6ddc09f65c5f02230227.jpg

  4. root.child是根据id,去查询pid=id的记录,也就是属于root下面的分类,比如:根据id=10000,查询出pid=10000的记录

    http://img1.sycdn.imooc.com//climg/5dce6e3e09e72f6a01910112.jpg

  5. 这里的cake与cakelog的关系是,cake的cid必须要cakelog中有相匹配的id才可以,也就是这个蛋糕必须要某个蛋糕分类的下面

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 慕码人5437048 #1
    那我要查pid=11000的该怎么办?是root.child查找pid=11000这样子吗?
    2019-11-15 18:02:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师