如何在 DDD 架构中的书籍、视频、照片等不同资源之间创建通用关系 table?

How do I create a universal relationships table between distinct resources like books, video, photos in DDD architecture?

我想知道如何在域设计项目(使用 NodeJS、NestJS)中创建诸如非规范化通用关系之类的东西 table。这些关系类似于社交媒体中的 'like',可以应用于不同的项目类型,可能会跨界上下文,但不需要了解上下文的域和内部逻辑。

在数据库术语中,这是概念,但通常不是好的做法:

Table: Universal_Relationships

Rel_ID  |   Res_A_ID    |   Res_A_Type  |   Res_B_ID    |   Res_B_Type

12              23              2               344             6


Table: Resource_Types

Type_ID |   Type_Name

2           Map_Location
6           Research_Reference
8           Photo
10          Artwork
11          Video
12          Note
[…]

Table: Map_Locations

Place_ID    |   Marker_Title    |   Coord_X (or Lat)    |   Coord_Y (or Long)   |   Description

    2           Eugene                  44.064319           -123.0825664                City

Table: Research_Reference

Ref_ID  |   Title           |   Publisher       |   Abstract

    6       Tourist Guide       Collins             Guide to ...

非常感谢任何帮助,谢谢

我建议将关系建模为聚合(不同类型的关系可能是不同的聚合,或者您可能只是 关系 是聚合);由于关系是不同限界上下文中聚合之间的事物之间的关系,因此这可能是它自己的限界上下文。

聚合基本上只是持有对相关聚合根的引用(通过 ID,而不是编程语言意义上的引用)(如果关系在可以关联的方面是自由形式的,这些 ID 将还对聚合类型进行编码)。

值得注意的是,当我们跨越有界上下文时(通常可以想象,它们可以在彼此之间的网络距离内开始操作),某种程度的最终一致性很可能会发挥作用:我建议不要尝试对关系强制执行强外键样式约束,除非你绝对确定你永远不会 运行 有界上下文彼此之间的网络距离(并明确表示这种关系有界上下文将阻止它从正在完成)。