FlameDra Asked: 2024-11-17 07:51:43 +0800 CST2024-11-17 07:51:43 +0800 CST 2024-11-17 07:51:43 +0800 CST 我该如何用双重引用简化这个模型? 772 我的 CRUD 应用程序的数据模型: 设置 FilmGroup 模型的正确方法是什么?它与 Film 具有一对多关系,与 FilmOrder 具有一对一关系。 我需要 FilmOrderID 和 FilmOrder 来将 FilmOrderID 与此模型关联起来,但也希望轻松访问关联的 FilmOrder,因为我将所有数据呈现给用户。 如何简化 FilmGroup 模型,使其不需要 FilmOrderID 和对 FilmOrder 对象的引用?如何映射FilmOrder *FilmOrder到数据库字段?我想对数据库模型使用相同的结构并显示对象。 sqlite 1 个回答 Voted Best Answer Schwern 2024-11-17T09:57:24+08:002024-11-17T09:57:24+08:00 ...FilmGroup 模型。它与 Film 具有一对多关系,与 FilmOrder 具有一对一关系。 一对一的关系很可疑并且难以执行。 这是一个更简单的模型,假设一部 Film 只能属于一个 FilmGroup,而一个 FilmOrder 只能属于一个 FilmGroup。Film 和 FilmOrder 均引用 FilmGroup。 Film -> FilmGroup <- FilmOrder 如果一部影片可以属于多个影片组,则可以将 FilmGroup_Film 连接表放回原位,但 FilmOrder 仍会引用 FilmGroup。 Film <- FilmGroup_Film -> FilmGroup <- FilmOrder 这两种情况都存在 FilmGroup 可能成为多个 FilmOrder 的主体的可能性。如果要使之一对一,请使 FilmOrders.film_group_id 唯一。 笔记 避免create table if not exists。这看起来很方便,但实际上你会创建表,更改create table if not exists语句,再次运行脚本,然后花几个小时试图找出它不起作用的原因。 SQLite 中不需要自动增量。 考虑使用时间戳而不是布尔值,这样您就可以跟踪发生的时间。Null 表示未发生。这很方便,并避免了使用冗余数据来跟踪时间戳。 使用时间戳而不是日期可获得更好的跟踪精度,除非您真的只想存储日期。您以后无法恢复精度,但您可以将时间戳截断为日期。 考虑使用 *_on 和 *_at 约定。film_received_by_lab_at 考虑制作一个表来存储胶片实验室以实现参照完整性,最终您可能希望存储有关实验室的额外信息。
一对一的关系很可疑并且难以执行。
这是一个更简单的模型,假设一部 Film 只能属于一个 FilmGroup,而一个 FilmOrder 只能属于一个 FilmGroup。Film 和 FilmOrder 均引用 FilmGroup。
如果一部影片可以属于多个影片组,则可以将 FilmGroup_Film 连接表放回原位,但 FilmOrder 仍会引用 FilmGroup。
这两种情况都存在 FilmGroup 可能成为多个 FilmOrder 的主体的可能性。如果要使之一对一,请使 FilmOrders.film_group_id 唯一。
笔记
create table if not exists
。这看起来很方便,但实际上你会创建表,更改create table if not exists
语句,再次运行脚本,然后花几个小时试图找出它不起作用的原因。