我有4个相关的表
+-----------+ +------------+ +---------+ +----------+
| Project | | Slide | | Shape | | Points |
+-----------+ +------------+ +---------+ +----------+
| id | | id | | id | | id |
+-----------+ | project_id | |slide_id | | shape_id |
+------------+ +---------+ | x |
| y |
+----------+
从ORI文档开始,我一直在阅读CodeIgniter中内置的Active记录对象,最好保持表格的结构,或者将它们更改为以下方式之一。
首先要使用像这样的总关系表
+-----------+ +------------+ +---------+ +----------+ +-------------------------------+
| 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,我可以保留它们,就像它们一样,我误解了文档。
感谢您的建议。
答案 0 :(得分:1)
首先应确定您定义的四个不同对象之间的关系类型。
例如,除非“Project”和“Slides”之间存在多对多关系,否则无需创建“Projects_Slides”表。实际上,我假设您希望每个项目都有许多幻灯片,每个幻灯片只与一个项目相关联?在这种情况下,您具有一对多关系,并且第一个模式将是最佳的。
如果你要定义一个Slide可以属于多个Project,那么这将是一个多对多的关系,而“Projects_Slides”表是有意义的。
答案 1 :(得分:0)
您是否打算让Shapes表自引用(它有id和shape_id列)?
通常,在正确规范化数据库时,ORM是最快乐的。我会说你的第一个例子是最合适的标准化,如果你想做我认为你做的事。