|
|
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
Искал, искал... формулировал поисковые запросы, формулировал... но ничего толком не нашел. Помогите, хотя бы подсказкой, где и что искать. БД - MySQL. Допустим, есть таблица пользователей: idданные Задача, сделать возможность связывать пользователей между собой. Получаем таблицу: id-пользователя 1 id-пользователя 2 данные связи И что теперь? Ну выбирать, относительно не проблема, UNION. Но как сделать уникальность пары в обе стороны? И как в таких случаях, не дублируют же информацию в обе стороны? Может это вообще не так связывается, не буду углубляться в поток непонимания, для начала этого хватит (а то сейчас нагорожу, время-то 2 часа ночи). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 02:04 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
Tuне дублируют же информацию в обе стороны? Что облегчало бы многое )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 02:18 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
TuИскал, искал... формулировал поисковые запросы, формулировал... но ничего толком не нашел. Помогите, хотя бы подсказкой, где и что искать. БД - MySQL. Допустим, есть таблица пользователей: idданные Задача, сделать возможность связывать пользователей между собой. Получаем таблицу: id-пользователя 1 id-пользователя 2 данные связи И что теперь? Ну выбирать, относительно не проблема, UNION. Но как сделать уникальность пары в обе стороны? И как в таких случаях, не дублируют же информацию в обе стороны? Может это вообще не так связывается, не буду углубляться в поток непонимания, для начала этого хватит (а то сейчас нагорожу, время-то 2 часа ночи). Сделайте 2 таблицы: Пользователи и СвязиПользователей. В пользователях храните их уникальные id и аттрибуты, в связях 2 столбца Пользователь1, Пользователь2, входящие в Primary Key, что гарантирует уникальность связи между пользователями без дублирования. P.S. Вообще то лучше книжки умные почитать про проектирование баз, нормализацию и т.д. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 09:00 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
TuИскал, искал... формулировал поисковые запросы, формулировал... но ничего толком не нашел. Помогите, хотя бы подсказкой, где и что искать. БД - MySQL. Допустим, есть таблица пользователей: idданные Задача, сделать возможность связывать пользователей между собой. Получаем таблицу: id-пользователя 1 id-пользователя 2 данные связи И что теперь? Ну выбирать, относительно не проблема, UNION. Но как сделать уникальность пары в обе стороны? И как в таких случаях, не дублируют же информацию в обе стороны? Может это вообще не так связывается, не буду углубляться в поток непонимания, для начала этого хватит (а то сейчас нагорожу, время-то 2 часа ночи).Добавьте CHECK CONSTRAINT id_1 < id_2 и вы сможете ввести связь для пользователей только один раз... Запросы - придется делать UNION-ами. Поэтому некоторые, чтобы упростить себе жизнь добавляют обратную свзяь. PS: то что вы нарисовали - это ориентированный граф. Вы хотите сделать неориентированный. Один из способов построить неориентированный из ориентированного - добавление обратных переходов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 10:47 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
Может быть для ненаправленных связей между объектами, можно считать их группировками объектов, даже более чем по два объекта в группе. objects ( object_id, object_data ) groups ( group_id, group_data ) object_groups ( object_id, group_id ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 10:52 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
ASCRUS Сделайте 2 таблицы: Пользователи и СвязиПользователей. В пользователях храните их уникальные id и аттрибуты, в связях 2 столбца Пользователь1, Пользователь2, входящие в Primary Key, что гарантирует уникальность связи между пользователями без дублирования Все что Вы написали, реализовано (что и написано выше). Но составной первичный ключ не спасает, вполне реальна такая ситуация: id-пользователя 1 id-пользователя 2 данные связи12...21... Уникальности связи нет. Основные проблемы начинаются при модификации, надо анализировать по двум полям и на основе изменять (в целом, это не проблема, но как-то кривовато). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 10:52 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatМожет быть для ненаправленных связей между объектами, можно считать их группировками объектов, даже более чем по два объекта в группе.Нельзя. Их того, что объект 1 граничит с 2, а объект 2 граничит с 3 - не значит, что у 1 и 3 есть общая граница. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 11:01 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
Bely, большое спасибо! P.S. читаю ман, но может кто-то знает, MySQL поддерживает CHECK CONSTRAINT или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 11:38 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
BelyНельзя. Их того, что объект 1 граничит с 2, а объект 2 граничит с 3 - не значит, что у 1 и 3 есть общая граница.не вижу противоречия objects объект_1 объект_2 объект_3 groups граница_1_2 граница_2_3 object_groups объект_1 граница_1_2 объект_2 граница_1_2 объект_2 граница_2_3 объект_3 граница_2_3 нет группы, содержащей объекты 1 и 3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 11:50 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatBelyНельзя. Их того, что объект 1 граничит с 2, а объект 2 граничит с 3 - не значит, что у 1 и 3 есть общая граница.не вижу противоречия objects объект_1 объект_2 объект_3 groups граница_1_2 граница_2_3 object_groups объект_1 граница_1_2 объект_2 граница_1_2 объект_2 граница_2_3 объект_3 граница_2_3 нет группы, содержащей объекты 1 и 3Было две сущности - узлы и дуги. Вы же для этого прилепили три таблицы. Фактически вам приходится на каждую дугу заводить группу. Чем от этого легче? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 12:22 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
BelyЧем от этого легче?выборки - без UNION ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 12:43 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
TuASCRUS Сделайте 2 таблицы: Пользователи и СвязиПользователей. В пользователях храните их уникальные id и аттрибуты, в связях 2 столбца Пользователь1, Пользователь2, входящие в Primary Key, что гарантирует уникальность связи между пользователями без дублирования Все что Вы написали, реализовано (что и написано выше). Но составной первичный ключ не спасает, вполне реальна такая ситуация: id-пользователя 1 id-пользователя 2 данные связи12...21... Уникальности связи нет. Основные проблемы начинаются при модификации, надо анализировать по двум полям и на основе изменять (в целом, это не проблема, но как-то кривовато). Ну сделайте как это реализовано во всех СУБД: таблица ГруппыПользователей с полями КодГруппы, Данные группы и таблица ПользователиГрупп с полями КодГруппы, КодПользователя, входящими в PK. Это даст Вам возможность объединять в группы при желании более 2 пользователей и простой способ контроля, модификации и получения информации по связям, причем пользователь будет искаться по одному полю, а не между двумя. Пример поиска данных группы по 2 пользователям: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 14:20 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
TuP.S. читаю ман, но может кто-то знает, MySQL поддерживает CHECK CONSTRAINT или нет?Считайте, что нет. CREATE TABLE Syntax CREATE TABLE SyntaxThe CHECK clause is parsed but ignored by all storage engines. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 14:26 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
ASCRUS, возможно не плохое решение, но мне кажется, производительность будет хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 14:45 |
|
||
|
Связь таблицы с собой
|
|||
|---|---|---|---|
|
#18+
TuASCRUS, возможно не плохое решение, но мне кажется, производительность будет хуже. Я думаю она будет лучше, ибо изначально это решение можно назвать нормализацией и при существовании индексов на поля КодГруппы и КодПользователя все будет летать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 16:54 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=92&tid=1543400]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 394ms |

| 0 / 0 |
