gpt4 book ai didi

iphone - 为核心数据手动创建多对多关系的中间表

转载 作者:行者123 更新时间:2023-12-03 19:44:43 25 4
gpt4 key购买 nike

我目前正在为 iPhone 项目使用 Core-data。

但我对一个元素有点困惑。

使用核心数据,目前您在创建多对多关系时不需要创建中间表(所有这些都由核心数据在幕后处理)

但就我而言,我实际上需要多对多关系的一些属性!

例如

我有一个名为 Students 的表另一个表名为 Lessons

一个Student可以有很多lessons和一个 lesson可以有很多students

现在标准的多对多关系对我来说不起作用,因为我实际上需要定义有关连接的更多详细信息,即 StartDateLeaveDate .

例如,在标准 SQL 模型中,我的连接表将类似于

StudentLessons (Studentid, LessonId, StartDate, LeaveDate )

我需要这些属性,因为当我查询信息时,我需要连接中的详细信息来过滤结果。

如何在核心数据中创建此内容并过滤结果?

我见过有人说你实际上会创建 StudentLesson在核心数据中手动实体。

现在,如果我这样做,我是否只拥有属性(开始日期、离开日期),然后是学生表和类(class)表的一对多关系?

Student - > StudentLessons
Lesson - > StudentLessons

我想我对如何确保正确设置关系和关系内容感到有点困惑。 (即,如果我将 Student 对象添加到 StudentLessons - 那么我将如何分配/添加 Lesson 。)

抱歉,这是我第一次使用 Core Data。

从一个完整的 SQL 背景开始,需要一点时间来适应。

最佳答案

你说得完全正确。正确的方法是创建一个新实体,例如StudentLessons。我们称之为出勤。它应该有 startDateendDate ,以及两个关系。

与学生的关系可以是多对多,除非可以预见每个学生的 startDate 和 endDate 始终不同。一次出勤及其日期可以有许多学生参加。一名学生可以承担多项出勤职责。

Student <<---->> Attendance

显然,与Lesson的关系应该是一对多的。一个类可以有不同的出勤配置和不同的日期。但每次出勤仅属于一类(class)

Lesson <---->> Attendance

为了解决您的问题,您可以将类(class)出勤属性设置为非可选(反之亦然),这样就可以确保每节类(class)至少有一次具有适当日期的出勤,并且每个出勤恰好有一门类(class)

我认为您可以删除学生类(class)之间的链接。只需分配出勤而不是类(class)。如果您希望将类(class)分配给没有日期的学生,只需允许出勤NULL作为那些属性。

关于iphone - 为核心数据手动创建多对多关系的中间表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com