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