Database design 表中的行分组-设计

Database design 表中的行分组-设计,database-design,Database Design,我有一张桌子,上面有树的结构。此表具有列“id、name、left、right和一个外键TreeId”,指向具有列“id”的表树以及有关该树的更多信息 现在,如果“id”是表树中唯一的一列,那么删除表树并让外键TreeId只是一列会更好吗 创建一个新的树意味着我必须检查TreeId的最高值,然后将其增加1以获得一个新值。这里有并发的危险 无论如何,这种情况下的最佳实践是什么?我认为,为了将来的使用,请保留树表 也许你将来需要一个树名 它可以像你说的那样工作,但不推荐 还有-如果桌子变得很大。。。

我有一张桌子,上面有树的结构。此表具有列“id、name、left、right和一个外键TreeId”,指向具有列“id”的表树以及有关该树的更多信息

现在,如果“id”是表树中唯一的一列,那么删除表树并让外键TreeId只是一列会更好吗

创建一个新的树意味着我必须检查TreeId的最高值,然后将其增加1以获得一个新值。这里有并发的危险


无论如何,这种情况下的最佳实践是什么?

我认为,为了将来的使用,请保留树表

也许你将来需要一个树名

它可以像你说的那样工作,但不推荐


还有-如果桌子变得很大。。。这将是非常低效的。

如果没有可靠的例子,很难说,但听起来很合理。我只是不确定当前模式中的
名称是指什么,以及为什么它与树结构而不是树相关


(就我个人而言,总的来说,我很乐意将嵌套的集合结构信息混合到数据表中。)

树表是一个独特的实体,即使该表是“所有键”,也应该有自己的表。以后可能会有,也可能不会有额外的列,但省略此表会使数据库非规范化,这对数据完整性总是一个潜在的危险


请注意,在大多数现代数据库中,您关心的并发问题是一个很容易解决的问题(ID列使用自动递增的标识类型),如果没有树表,实际上情况会更糟,因为您必须对整个叶表进行MAX(ID)扫描

Idd,我们甚至在树表中还有更多的列,但它们不是必需的。