Как настроить MySQL Database Relationship - PullRequest
1 голос
/ 18 марта 2009

У меня есть база данных, в которой есть две таблицы «местоположения» и «классы». Я знаком с настройкой своего рода родительской / дочерней ситуации с моими таблицами базы данных, но эта заставила меня замкнуться.

Эти отношения работают точно так, как вы ожидаете. «Места» имеют несколько «классов». Но некоторые из «классов» находятся в нескольких «местах». Так как мне это настроить? Нужно ли создавать третью таблицу для обработки отношений?

Я использую MySQL / PHP (в случае, если это имеет значение)

Ответы [ 4 ]

3 голосов
/ 18 марта 2009

Да, вам нужна третья таблица, потому что это отношение многих ко многим.

 --------         -----------------
|Class   |       | ClassLocation   |        ------------
|--------|       |-----------------|       | Location   |
|Id      | <---- |ClassId          |       |------------|
|Name    |       |LocationId       | ----> |Id          |
|...     |        -----------------        |Name        |
 --------                                  | ...        |
                                            ------------

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

3 голосов
/ 18 марта 2009

Да, вам нужен третий стол. Это называется отношение «многие ко многим» . Таблица будет (я рекомендую) иметь первичный ключ, столбец идентификатора местоположения и столбец идентификатора класса.

2 голосов
/ 18 марта 2009
   locations           location_classes           classes

+----+-------+    +-------------+----------+   +----+-------+
| id | title |    | location_id | class_id |   | id | title |
+----+-------+    +-------------+----------+   +----+-------+
|  1 |   foo |    |           1 |        1 |   |  1 | clas1 |
|  2 |   bar |    |           3 |        1 |   |  2 | clas2 |
|  3 |  test |    |           1 |        2 |   +----+-------+
+----+-------+    |           2 |        2 |   
                  |           3 |        2 |
                  +-------------+----------+
1 голос
/ 18 марта 2009

Вам нужен объединительный стол:

tbl_location
ID: int
Name: Varchar(20)

tbl_class
ID: int
Name: Varchar(20)


tbl_classlocation
ID: int
locationID: int
classID: int

Что-то в этом духе, по сути, таблица classlocation объединяет две другие (оба locationId и classID являются внешними ключами из таблиц location и class)

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