ORM的最佳表结构是什么

时间:2011-04-15 03:56:31

标签: php mysql codeigniter orm

我有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,我可以保留它们,就像它们一样,我误解了文档。

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

首先应确定您定义的四个不同对象之间的关系类型。

例如,除非“Project”和“Slides”之间存在多对多关系,否则无需创建“Projects_Slides”表。实际上,我假设您希望每个项目都有许多幻灯片,每个幻灯片只与一个项目相关联?在这种情况下,您具有一对多关系,并且第一个模式将是最佳的。

如果你要定义一个Slide可以属于多个Project,那么这将是一个多对多的关系,而“Projects_Slides”表是有意义的。

答案 1 :(得分:0)

您是否打算让Shapes表自引用(它有id和shape_id列)?

通常,在正确规范化数据库时,ORM是最快乐的。我会说你的第一个例子是最合适的标准化,如果你想做我认为你做的事。