2011-05-16 67 views
1

我在Core Data中有以下建模问题。学生可以接受教训。 的教训具有以下字段:
寻求核心数据模型设计建议

title 
date 
grade 
type

的教训可以是三种类型之一:

lessontype1

subtype11 subtype12 subtype13 

lessontype2

 
subtype21 subtype22 subtype23 subtype24 

lessontype3

 subtype31 subtype32 subtype33 subtype34 subtype35 

如何设置lesson.type任何这三种类型的教训呢?有没有更好的方法来模拟这种情况?

+0

是类型和子类的类吗?或者他们只是一些指标?还有什么取决于类型? – 2011-05-16 19:23:37

+0

@Nick Weaver是的课程类型是类,子类型是字段。如果课程类型改变了它们的显示方式并添加更改。 – Sam 2011-05-18 08:22:00

回答

1

模型的细节取决于您正在建模的数据的细节。

如果类型只是没有逻辑或与他们相关联的行为标记,那么最简单的模型应该是:

Student{ 
    lessons<-->>Lesson.student 
} 

Lesson{ 
    title:string 
    date:date 
    grade:number 
    type:string 
    subtype:string 
    student<<-->Student.lessons 
} 

如果教训有某种与每种类型相关联的行为,那么你可以为每种课程创建子实体。

Lesson{ 
    title:string 
    date:date 
    grade:number 
    student<<-->Student.lessons 
} 

TypeOne:Lesson{ 

} 

TypeOneSubOne:TypeOne{ 

} 

// ...etc 

由于所有Lesson子实体都从Lesson继承,所以它们也可以继承关系。所有不同的子实体可以处于Student.lesson关系中。

如果课程的类型具有与它们相关的行为,那么也可以将它们分解为单独的实体。

Lesson{ 
    title:string 
    date:date 
    grade:number 
    type<<-->Type.lessons 
    student<<-->Student.lessons 
} 

Type{ 
    lessons<-->>Lesson.type 
} 

TypeOne:Type{ 

} 

TypeOneSubOne:TypeOne{ 

} 

核心数据模型旨在模拟真实世界的对象,事件或条件以及它们之间的关系。设计模型的第一步是了解这些现实世界中的事物及其之间的关系。

+0

我认为第三个解决方案是最优雅的解决方案。但由于其简单的性质和较低的班级开销,我将与第一个一起工作。 – Sam 2011-05-18 08:24:12