【问题标题】:NoSQL to SQL adapter design patternNoSQL 到 SQL 适配器设计模式
【发布时间】:2017-02-19 03:54:04
【问题描述】:

我想以某种方式桥接 2 个现有应用程序。两者都有相似的域(产品目录),但第一个应用程序使用 NoSQL 文档存储来存储记录,而第二个应用程序使用 SQL 表。

第一个表中的示例记录如下所示:

{
  "productId": 123,
  "sku": "abc",
  "packageSizes": {
    "container": 20,
    "pallet": 50
  }
}

而第二个域中的相同项目将是 ProductItem 表中的 1 行:

| id  | sku |
| 123 | abc |

然后ProductPackageSizes 表中的 2 行:

| productId | type      | size |
| 123       | container | 20   |
| 123       | pallet    | 50   | 

系统目前是完全独立的,但我希望这样每当在 NoSQL 应用程序中创建记录时,在 SQL 应用程序中创建相同的项目。

我可以为此编写一个一次性脚本,它只是根据当前数据的样子以程序方式创建它。但是,我很想知道是否有任何既定的设计模式来描述这种转换?特别是如果将来有新的packageSizes 或其他关系添加。

【问题讨论】:

  • 取决于最终目的?只是为了在 NoSQL 和 SQL 之间复制数据库模式。可以,但我为什么要问?
  • @user7568042 虽然应用程序有一些相同类型的数据,但它们并不完全相同。第一个目的略有不同,更受我控制。而第二个应用程序 (SQL) 是我们碰巧与之集成的第 3 方报告应用程序,但需要将数据发送到其中。

标签: sql node.js design-patterns nosql


【解决方案1】:

你的sql数据库中没有外键?

您可以在与ProductItem 相关的ProductPackageSizes 表中使用外键,然后在每次您想在Nosql 数据库中创建新记录时使用,您可以指定

"productId": 123,"sku": "abc"

ProductItem 中,比如:

| id | sku | | 123 | abc |

并分配

"packageSizes": {
"container": 20,
"pallet": 50 }

ProductPackageSizes 使用外键(如P_id),如:

| productId | type | size |P_id | 123 | container | 20 |123 | 123 | pallet | 50 |123

希望这会有所帮助:)

【讨论】:

  • 他的示例从字面上显示了 FK。 PK 是为了简洁而提交的。
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多