我有4个这样的表
+-----------+ +------------+ +---------+ +----------+
| Project | | Slide | | Shape | | Points |
+-----------+ +------------+ +---------+ +----------+
| id | | id | | id | | id |
+-----------+ | project_id | |slide_id | | shape_id |
+------------+ +---------+ | x |
| y |
+----------+
从ORM文档中,我一直在阅读CodeIgniter中内置的活动记录对象,最好保持表的结构,或者将它们更改为以下方式之一:
首先是使用如下所示的总关系表
+-----------+ +------------+ +---------+ +----------+ +-------------------------------+
| Projects | | Slides | | Shapes | | Points | | Projects_Slides_Shapes_Points |
+-----------+ +------------+ +---------+ +----------+ +-------------------------------+
| id | | id | | id | | id | | id |
+-----------+ +------------+ +---------+ | x | | Project_id |
| y | | Slide_id |
+----------+ | Shape_id |
| Point_id )
+-------------------------------+
这样,所有的东西都是通过一个表联系起来的,或者我应该把东西与单独的表联系起来,而不是上面的关系表看起来像这样。
+-----------------+ +---------------+ +---------------+
| Projects_Slides | | Slides_Shapes | | Shapes_Points |
+-----------------+ +---------------+ +---------------+
| id | | id | | id |
| Project_id | | Slide_id | | Shape_id |
| Slide_id | | Shape_id | | Point_id |
+-----------------+ +---------------+ +---------------+
第一种方法将有更少的条目和更少的查询来构建ORM对象;另一方面,另一种方法有更少的条目和更多的查询。我真的不知道哪个是最好的,或者ORM更喜欢哪个。或者ORM是否可以处理其中一个。
或者对于一个ORM,我可以保持它们原来的样子吗?我误解了文档。
谢谢你的建议
您应该首先确定在您定义的四个不同对象之间将具有什么样的关系。
例如,除非"Project"answers"Slides"之间存在多对多关系,否则不需要创建"Projects_Slides"表。实际上,我假设您希望每个项目有许多幻灯片,并且每张幻灯片仅与一个项目相关联?在这种情况下,您有一个一对多的关系,第一个模式将是最好的。
如果您要定义一个幻灯片可以属于多个项目,那么这将是一个多对多关系,并且"Projects_Slides"表将是有意义的。
你打算为形状表是自我引用(它有id和shape_id列)?
通常,当您正确规范化数据库时,ORM是最快乐的。我想说你的第一个例子是最合适的规范化,如果你想做我认为你是。