问题一:
自连接表肯定是相似 Id(PK),parentId(FK),name ….了
Id假如是主键的话,parentId就是外键了,
可是树形结构肯定是有根节点了,那么根节点的parentId按理说应该是null,原因是根节点没有父节点,
可是主键Id是不能为空的啊,导致外键parentId也不能为null,那本人输入数据的时候怎么办呢?
问题二:
本人为了避免问题一中的麻烦,本人单独弄了个uuid主键ID,而然后是唯一索引Bh(编号),然后是上级编号parentBh
也就是自连接表项为 ID(PK),Bh(unique),parentBh(FK),name…
这样以来,外键parentId就可以为null了,也就实现了树形结构根节点的父节点为null了。
本来还挺高兴,但是网上有人说本人这么设计数据库根本不合理,说外键就应该关联主键,真的是这样么,那本人说的问题一怎么样解决呢?本人看很多人定义自连接表,parentId都default null,却不设置为外键,这样根节点的parentId的确默认为null了,可是他们这样岂不是就不能用数据库自带的级联操作了么?只能程序控制parentId和Id的一致性了吧?
问题三:
一开始本人是按照问题二描述的那样设计的数据库表,可是后来本人发现,假如是两张表有主外键关联关系的话,本人修改或删除主表的唯一索引,从表的外键会自动修改或删除/set null。
可是假如是自连接表的话,就只能级联删除/set null, 却不能级联更新,这是为什么呢?一修改唯一索引就报错。
问题四:
由于本人不会在hibernate配置文件里(hbm.xml文件)配置主外键关联,所以只能像以前那样写个基本的pojo和.hbm.xml,然后生成数据库表,最后本人在数据库中设置的外键关联,现在使用没出现什么错误,问一下是不是可以这样,而不必非得把hibernate配置中也加上<many to one> 和<set>之类的配置呢?
问题五:问一下假如客户想要看到数据库表中数据的树形结构,不知道这样的形式能否容易实现呢?
请有耐心、有经验的高手们帮帮小弟吧!
自连接表肯定是相似 Id(PK),parentId(FK),name ….了
Id假如是主键的话,parentId就是外键了,
可是树形结构肯定是有根节点了,那么根节点的parentId按理说应该是null,原因是根节点没有父节点,
可是主键Id是不能为空的啊,导致外键parentId也不能为null,那本人输入数据的时候怎么办呢?
问题二:
本人为了避免问题一中的麻烦,本人单独弄了个uuid主键ID,而然后是唯一索引Bh(编号),然后是上级编号parentBh
也就是自连接表项为 ID(PK),Bh(unique),parentBh(FK),name…
这样以来,外键parentId就可以为null了,也就实现了树形结构根节点的父节点为null了。
本来还挺高兴,但是网上有人说本人这么设计数据库根本不合理,说外键就应该关联主键,真的是这样么,那本人说的问题一怎么样解决呢?本人看很多人定义自连接表,parentId都default null,却不设置为外键,这样根节点的parentId的确默认为null了,可是他们这样岂不是就不能用数据库自带的级联操作了么?只能程序控制parentId和Id的一致性了吧?
问题三:
一开始本人是按照问题二描述的那样设计的数据库表,可是后来本人发现,假如是两张表有主外键关联关系的话,本人修改或删除主表的唯一索引,从表的外键会自动修改或删除/set null。
可是假如是自连接表的话,就只能级联删除/set null, 却不能级联更新,这是为什么呢?一修改唯一索引就报错。
问题四:
由于本人不会在hibernate配置文件里(hbm.xml文件)配置主外键关联,所以只能像以前那样写个基本的pojo和.hbm.xml,然后生成数据库表,最后本人在数据库中设置的外键关联,现在使用没出现什么错误,问一下是不是可以这样,而不必非得把hibernate配置中也加上<many to one> 和<set>之类的配置呢?
问题五:问一下假如客户想要看到数据库表中数据的树形结构,不知道这样的形式能否容易实现呢?
请有耐心、有经验的高手们帮帮小弟吧!
解决方案
40
呵呵,关键是你的父ID可以为空呀。你的思路有问题了。