swift - iOS 上的解析平台:大型多对多的关系、联接或数组?
问题描述
在 iOS 上 Swift 的 Parse.com API 参考中,根据多方的预期大小,何时使用不同类型的一对多关系非常清楚。
但我发现当双方都非常大时,使用哪种多对多关系不太清楚。
就我而言,我有一个可以做出小额(通常是一美元)贡献的Charity
对象——所以可以想象每个人都可以做出数千个这样的贡献,每个人都可以有数千个贡献给它。Users
User
Charity
Users
为这类事情列出的多对多选项是解析关系、连接表和数组,文档对此进行了解释:
- 当关系可靠地包含少于 100 个引用时,应该使用数组,这是非常清晰和有用的指导,我不应该使用数组。
- 文档说 Parse Relations 可以用于,例如,连接
Books
多个Authors
和Authors
多个Books
- 在这种情况下,给定Book
的不太可能超过 100Authors
,并且很少会Author
超过 100Books
-所以不清楚这是否是当双方都可能非常大时是合适的,就像我的情况一样。 - 文档说,当额外的元数据应该附加到每个关系时,应该使用连接表,所以一方面,我目前没有明确的需要,另一方面,文档似乎甚至没有提到任何东西关于多对多关系的每一方的大小如何或是否重要。
在没有任何其他信息的情况下,看起来我应该使用 Join Tables,但这只是因为文档并不暗示我不应该,而不是因为文档说我应该。
这似乎是一个站不住脚的理由。
我将非常感谢任何人可以提供的任何指导。
解决方案
在幕后,当您使用 Relation 时,Parse Server 会自动为您创建一个 Joint Table 并提供一些 API,以便轻松管理和获取其数据。因此,在性能方面,它应该非常相似。
Relation 的缺点是无法将新字段添加到它创建的“联合表”中。因此,例如,如果您需要存储每个用户喜欢的慈善机构,那么 User 和 Charity 之间的关系将是一个很好的选择,因为您只需要存储该关系存在而不需要存储任何额外的信息。
另一方面,如果您需要存储每个用户对每个慈善机构所做的捐赠,我将创建一个名为 Donation 或 UserCharity 的联合表,其中包含指向 User 类的指针、指向 Charity 类的指针以及捐赠的价值。在这种情况下,Relation 不合适,因为您需要存储捐赠值。
推荐阅读
- python - 优化 json.load() 以减少 Python 中的内存使用和时间
- linux - Alpine Linux 映像上的 maven 和 jdk8
- sql - 怎么按case和order呢?
- sql - 如何构造复杂的 django 查询语句?
- multithreading - 既然 U32 已经实现了同步,为什么还要在 Rust 中使用 AtomicU32?
- python - 具有离散数据的高斯混合模型
- c# - 使用 OneDrive API 的正确方法是什么?
- sql - 使用 CTE 计算累积和
- jekyll - 如何使用 Jekyll 将网站部署到 Internet?
- python-3.x - 将自定义格式化日期从字符串转换为日期时间对象