通过阅读有关 Core Data 的 Apple 文档,我了解到,当您需要动态架构时,不应使用 Core Data。如果我想为用户提供创建自己的属性的能力,那么在核心数据模型中,如果我创建一些“虚拟”属性,例如“自定义十进制 1”、“自定义十进制 2”、“自定义文本 1”,它会起作用吗?用户可以命名并用于自己目的的“自定义文本 2”等?
显然这不适用于关系,但对于简单的属性来说,这似乎是一个合理的解决方法。在我的实体上创建一堆大多数用户未使用的虚拟属性是否会显着降低它们的性能?你们有人尝试过这样的事情吗?谢谢!
最佳答案
首先,请参阅核心数据文档 on relationships 。使用您的示例,请考虑以下内容:
- CarAttributeType 实体,其名称例如“重量(磅)”
- CarAttribute 实体,其值例如 2765。
- 汽车实体,具有您提到的所需值(例如“颜色”、“品牌”等)
然后,CarAttribute 和 CarAttributeType 之间存在多对一关系(许多 CarAttribute 可以具有相同的类型),Car 和 CarAttribute 之间存在一对多关系(每辆车可以有多个属性)。该解决方案的设置比硬编码的 NULL 字段稍微复杂一些。但是,它避免了 repeating groups并且希望更易于维护。
编辑:是的,我错过了。我认为您需要 StringCarAttribute、StringCarAttributeType、FloatCarAttribute、FloatCarAttributeType 等。然后,在 StringCarAttribute 和 StringCarAttributeType 等之间进行多对一。Car 将与 StringCarAttribute 和 FloatCarAttribute 进行一对多。多个类型实体的原因是您没有 StringCarAttribute 和 FloatCarAttribute,它们都声明自己使用单个权重属性类型。
拥有一个包含所有类型的 CarAttribute 违反了 1NF#4。
关于objective-c - 在核心数据中伪造动态模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451909/