Какова лучшая структура стола для ORM? - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть 4 таблицы, связанные так

+-----------+    +------------+    +---------+    +----------+
|  Project  |    | Slide      |    | Shape   |    |  Points  |
+-----------+    +------------+    +---------+    +----------+
|    id     |    |  id        |    | id      |    | id       |
+-----------+    | project_id |    |slide_id |    | shape_id |
                 +------------+    +---------+    | x        |
                                                  | y        |
                                                  +----------+

Из документов ORM, которые я читал для объекта Active record, встроенного в 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 может обрабатывать один или другой.

Или для ОРМ я могу оставить их такими, какие они есть, и я неправильно понимаю документы.

Спасибо за совет.

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Сначала вы должны определить, какие у вас будут отношения между четырьмя различными объектами, которые вы определили.

Например, нет необходимости создавать таблицу «Projects_Slides», если у вас нет отношения «многие ко многим» между «Project» и «Slides». Я полагаю, что вы хотите, чтобы в каждом проекте было много слайдов, а каждый слайд был связан только с одним проектом? В этом случае у вас есть отношение один ко многим, и первая схема будет лучшей.

Если бы вы определили, что слайд может принадлежать более чем одному проекту, тогда это будет отношение «многие ко многим», и таблица «Projects_Slides» будет иметь смысл.

0 голосов
/ 15 апреля 2011

Вы намеревались, чтобы таблица Shapes была самореференциальной (в ней есть столбцы id и shape_id)?

Как правило, ORM более счастливы, когда вы правильно нормализуете свою базу данных. Я бы сказал, что ваш первый пример наиболее правильно нормализован, если вы пытаетесь сделать то, что я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...