Связать один элемент с другим элементом в той же таблице - PullRequest
0 голосов
/ 24 июня 2019

Я много искал, но ничего не нашел.

Мой сценарий:

У меня есть база данных с двумя таблицами table_item и table_item_linked. table_item имеет много предметов. Пользователь придет и добавит пункт (ы). Позже приходит другой пользователь и link один элемент с другим элементом (ами) через форму с двумя dropdown.

То, что я сделал до сих пор:

Структура table_item:

+-------------------+
| table_item        |
+-------------------+
| item_id (Primary) |
| others            |
| ....              |
| ....              |
| ....              |
+-------------------+

Структура table_item_linked:

+---------------------+
| table_item_linked   |
+---------------------+
| linked_id           | (Primary)
| item_id             | (Foreign key referencing -> item_id of table_item) 
| linked_items        | (here I need to store ids of linked items)    
| linked_by           | (referencing to user_id of user_table)           
| linked_timestamp    | (timestamp) 
+---------------------+

Если у меня есть предметы в table_item вроде: A B C D E F G H

Когда я связываю D с G

Я могу успешно получить G, когда получаю D или наоборот. Но проблема возникла, когда я

Ссылка H с G

Так что я должен получить D H при получении G.

(D H G связаны между собой всеми способами, и после извлечения одного из них два оставшихся должны быть присоединены и извлечены)

Это похоже на множественное отношение (отношение Много ко Многим).

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

PS: Пожалуйста, не предлагайте добавлять #tag, так как один элемент в точности похож на другой связанный.

1 Ответ

0 голосов
/ 24 июня 2019

Очевидное решение - хранить по одной строке для каждой ссылки в table_item_linked.

Ваш стол становится

+---------------------+
| table_item_linked   |
+---------------------+
| linked_id           | (Primary
| from_item_id        | (The item linked _from_ -> item_id of table_item) 
| to_item_id          | the item linked _to_  
| linked_by           | (referencing to user_id of user_table)           
| linked_timestamp    | (timestamp) 
+---------------------+

В вашем примере данные будут:

linked_id     from_item_id    to_item_id   linked_by   linked_timestamp
------------------------------------------------------------------------
1                        D            H            sd      '1 jan 2020'
2                        H            G            sa      '2 Jan 2020'

Затем вам нужно написать иерархический запрос , чтобы получить все «потомки» G.

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