如何为PostgreSQL中的自链接记录设计最佳实践数据结构?

如何为PostgreSQL中的自链接记录设计最佳实践数据结构?,sql,postgresql,database-design,relational-database,Sql,Postgresql,Database Design,Relational Database,在我的PostgreSQL数据库中,我需要定义以下数据结构。将有一个项的表,它有一个自动递增的列item_id和其他项规范。输入新项目时,项目id将增加1。这是针对父项的 还有一些子项具有相同的项规格及其未使用项id。多个子项可以与父项关联。第一个子项的item_id定义为{parent_item_id}.1,第二个子项定义为{parent_item_id}.2,依此类推 父项可以与多个子项关联,因此形成“一对多”关系 pseudo Parent Item item_id, item_name,

在我的PostgreSQL数据库中,我需要定义以下数据结构。将有一个
项的表
,它有一个自动递增的列item_id和其他项规范。输入新项目时,项目id将增加1。这是针对父项的

还有一些子项具有相同的项规格及其未使用项id。多个子项可以与父项关联。第一个子项的item_id定义为{parent_item_id}.1,第二个子项定义为{parent_item_id}.2,依此类推

父项可以与多个子项关联,因此形成“一对多”关系

pseudo Parent Item
item_id, item_name, attribute1, attribute2... attributeN
1, item_name1, attribute, attribute, ..., attributeN
2, item_name2, attribute, attribute, ..., attributeN
3, item_name3, attribute, attribute, ..., attributeN

Please note item_id for only the parent items needs auto-incrementing by 1.

pseudo Child Item
item_id, item_name, attribute1, attribute2... attributeN
1.1, item_name, attribute, attribute, ..., attributeN
1.2, item_name, attribute, attribute, ..., attributeN
1.3, item_name, attribute, attribute, ..., attributeN
2.1, item_name, attribute, attribute, ..., attributeN
2.2, item_name, attribute, attribute, ..., attributeN
3.1, item_name, attribute, attribute, ..., attributeN

构建数据结构的最佳实践是什么?为父级和子级创建两个单独的表,再加上一个关系表,这是一个好的选择吗?;还是将父项和子项放在一个表中?

我建议在同一个表中使用父项和子项记录。作为规范化设计的一部分,使用具有父项id的列。如果项是父项,则父项id将为空,否则相应的项id将为空

如何使用所有子记录跟踪父项?

使用递归CTE仅从单个项目id获取所有记录。

无需为父项目id创建自动增量引用。请参考以下示例

CREATE TABLE item_mst(item_id BIGSERIAL, Item_name VARCHAR(100), parent_item_id BIGINT, is_active BOOLEAN, created_at TIMESTAMP)

For inserting Parent Item:
INSERT INTO item_mst(item_name, parent_item_id, is_active, created_at)
VALUES('Books',NULL, TRUE, NOW());

For inserting Child Items:
INSERT INTO item_mst(item_name, parent_item_id, is_active, created_at)
VALUES('Book_1',1, TRUE, NOW()), ('Book_2',1, TRUE, NOW()),('Book_3',1, TRUE, NOW());

select * from item_mst;

. . 我认为没有“最佳实践”。这取决于实体代表什么。嗨。这是一个常见问题。请总是用谷歌搜索你的问题/问题/目标的许多清晰、简洁和具体的版本/措辞,有或没有你的特定字符串/名称,并阅读许多答案。将发现的相关关键字添加到搜索中。如果你找不到答案,就发布,使用一种变体搜索你的标题和标签的关键词。这也太宽泛了,你要的是一本书或一章。可能是重复的谢谢。父项的项\u id自动递增1,但子项不是。如何处理?所有项目都将按项目id自动递增,无论是父项还是子项。