我先来概述一下这个场景.我有一个可以分配给许多不同对象的Note对象
一本书可以有一个或多个注释.
>图像可以有一个或多个Notes.
> A地址可以有一个或多个Notes.
我想像的数据库如下所示:
书
id | title | pages 1 | harry potter | 200 2 | game of thrones | 500
图片
id | full | thumb 2 | image.jpg | image-thumb.jpg
地址
id | street | city 1 | 123 street | denver 2 | central ave | tampa
注意
id | object_id | object_type | content | date 1 | 1 | image | "lovely pic" | 2015-02-10 2 | 1 | image | "red tint" | 2015-02-30 3 | 1 | address | "invalid" | 2015-01-05 4 | 2 | book | "boobies" | 2014-09-06 5 | 1 | book | "prettygood" | 2016-05-05
问题是,我如何在Doctrine内建模.关于单表继承的一切,我没有一对多的关系.
要注意(没有双关意图),您可能会注意到该笔记根本不需要基于与之相关的对象的唯一属性.
理想情况下,我可以执行$address-> getNotes(),它将返回$image-> getNotes()返回的相同类型的Note对象.
我至少要解决的问题是避免有三个不同的表:image_notes,book_notes和address_notes.
这个问题给应用程序带来了不必要的复杂性.只是因为笔记具有相同的结构并不意味着它们是相同的实体.当在3NF中对数据库进行建模时,它们不是相同的实体,因为注释不能从书籍移动到地址.在你的描述中,书和book_note之间有一个明确的亲子关系,所以建立它.
更多的表不是数据库的问题,但不必要的代码复杂性就是这个问题所示.聪明的聪明才智.这是ORM的麻烦,人们停止进行完整的归一化,并且不能正确建模数据库.