我有一个 Posts 表,希望能够发表评论,这些评论本身就是完整的 Posts。因此,我没有创建 Comments 表,而是考虑将 parent_id 列添加到 Posts 表。这是反模式吗?有更好的方法吗?如果不是,我该如何模拟这种关系?它不是真正的外键,是吗?
数据库:Postgres,尽管我正在使用 DBML https://github.com/holitics/dbml/tree/master/dbml-homepage/docs对其进行建模
我有一个 Posts 表,希望能够发表评论,这些评论本身就是完整的 Posts。因此,我没有创建 Comments 表,而是考虑将 parent_id 列添加到 Posts 表。这是反模式吗?有更好的方法吗?如果不是,我该如何模拟这种关系?它不是真正的外键,是吗?
数据库:Postgres,尽管我正在使用 DBML https://github.com/holitics/dbml/tree/master/dbml-homepage/docs对其进行建模
您提出的方法类似于带有 的标准
employee
表managerid
,因此这显然不是一个愚蠢的方法。您将能够使用在此类示例表上使用的标准查询来查询它(尽管请注意,此类表上的许多查询示例是分层的 - 您可能会发现自己缓存了每个帖子的完整父链以加快操作速度)。您将自己锁定在每个帖子的一个父级(如果您的模型是 Slack 或 Reddit,这是一个标准约束)。你将面临的主要挑战是,如果你不软删除被删除的帖子,你将需要清理孤儿 - 并且你可能对软删除和硬删除有不同的行为(例如,如果删除 Reddit 帖子,评论就会消失,但如果评论被删除,回复可能会被保留)。