【发布时间】:2019-01-31 07:22:39
【问题描述】:
如果我有一个客户实体,并且他们在时间 t1 从具有以下事实的地址搬迁:
- address_line_1 = "唐宁街 10 号"
- address_line_2 = "威斯敏斯特"
- city = "伦敦"
到一个新的地址和时间 t2 与这些事实:
- address_line_1 = "1600 Pennsylvania Ave NW"
- city = "华盛顿特区"
如何避免 t2 以后的地址看起来像:
- address_line_1 = "1600 Pennsylvania Ave NW"
- address_line_2 = "威斯敏斯特"
- city = "华盛顿特区"
我能想到的选项:
- 在 t2 断言 address_line_2 = "" 以重置或清除它。
- 将地址作为它自己的实体指向一个新地址实体,该实体只有两个事实:address_line_1 = "1600 Pennsylvania Ave NW" 和 city = "Washington DC"。
- 在 t2 断言一个新事实,例如 "moved_house" = true 以表示 tehir 地址不同。
我的想法:
- 选项 1 似乎依赖于“了解”以前设置的所有时间可能不再正确的内容,因此您可以将它们排除在外。
- 选项 2 似乎最好 - 但确实意味着定义的网络比我预期的要多。
- 选项 3 看起来很糟糕!
任何其他人对此的想法将不胜感激:)
【问题讨论】:
-
您也可以使用事务函数收回 address_line_2 datom。
-
1 或 2 都可以。我更喜欢#2,因为地址是一个独立的“实体”(您通常会将 Address 在 Java 等中作为一个单独的类)。
-
谢谢 :) 但是我对选项 #1 的评论呢?“选项 1 似乎依赖于“了解”以前设置的内容,这可能不再适用,因此您可以将它们排除在外。 "我的想法比这个地址示例更普遍。选项 #2 似乎更笼统 - 但请参阅下面的评论。
标签: data-modeling datomic