|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
Мне надо сохранять в базу связь двух пользователей между собой, и данные по этой связи. Вариант1: Все в одной таблице user1, user2, данные Проблема возникает в выборках, если я хочу найти все записи по какому то пользователю, мне надо делать два прохода, искать по столбцу user1, потом по столбцу user2 А джоины с другими таблицами вообще кошмар. Вариант1: Все в одной таблице user1, user2, данные но при записи новых данных всегда пишем 2 строки, дублируя данные и меняя пользователей местами. user1, user2, данные user2, user1, данные С выборками и джоинами все стало просто. Но данные хранятся 2 раза, и мне это кажется каким то кривым решением. Вариант3: Чтобы избежать дублирования, и сохранить симметрию можно использовать вариант с 2мя таблицами: 1) id, данные 2) user, id в таблице с общими данными Тут и симметрия, и нет избыточного хранения данных, но даже простейший запрос, получается каким то громоздким и по идее гораздо более медленным чем из варианта2. Основной запрос к базе: Известен пользователь, найти всех пользователей с которыми он связан и данные связи. Задача должно быть типичная, и для нее наверное известно наилучшее решение? подскажите. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 21:36 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitch, По постановке задачи пользователи могут быть связаны не напрямую? Например user1-user2-данные1 и user2-user3-данные2? Судя по задаче планируется хранить граф связей между объектами? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 21:51 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitchесли я хочу найти все записи по какому то пользователю, мне надо делать два прохода, искать по столбцу user1, потом по столбцу user2 "Чо?" (с) У тебя в SQL кто-то удалил оператор OR? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 22:11 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
L.OtujktdПо постановке задачи пользователи могут быть связаны не напрямую? Например user1-user2-данные1 и user2-user3-данные2? Судя по задаче планируется хранить граф связей между объектами? Любые два пользователя могут быть связаны между собой. Также, они могут быть связаны произвольное количество раз, разными данными описывающими эту связь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 02:03 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovAkaMitchесли я хочу найти все записи по какому то пользователю, мне надо делать два прохода, искать по столбцу user1, потом по столбцу user2 "Чо?" (с) У тебя в SQL кто-то удалил оператор OR? Давай, приведу пример, а ты покажешь как решить запрос в один проход при помощи OR. Тк я реально не понимаю, как это сделать простым образом. user1, user2, dataStrings - столбцы вася, петя, hash1 петя, коля, hash2 макр, виктор, hash3 Мне надо выбрать все связи имеющиеся у "петя", вне зависимости от того попал ли петя в user1 или в user2, нужный результат запроса в этом примере: вася, hash1 коля, hash2 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 02:10 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
L.OtujktdСудя по задаче планируется хранить граф связей между объектами? Да точно, это не ориентированный граф получается по структуре. С нюансом, что кроме самого наличия или отсутствия ребра графа, мне надо хранить еще информацию, описывающую каждое существующее ребро. PS я не обнаружил возможности отредактировать даже только что написанное сообщение. Подскажите, тут нет такой кнопки? Или я ее не нашел? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 02:18 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitchDimitry Sibiryakovпропущено... "Чо?" (с) У тебя в SQL кто-то удалил оператор OR? Давай, приведу пример, а ты покажешь как решить запрос в один проход при помощи OR. Тк я реально не понимаю, как это сделать простым образом. user1, user2, dataStrings - столбцы вася, петя, hash1 петя, коля, hash2 макр, виктор, hash3 Мне надо выбрать все связи имеющиеся у "петя", вне зависимости от того попал ли петя в user1 или в user2, нужный результат запроса в этом примере: вася, hash1 коля, hash2 Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 06:43 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitch я не обнаружил возможности отредактировать даже только что написанное сообщение. Подскажите, тут нет такой кнопки? Или я ее не нашел? тут такой кнопки нет ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 06:45 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitchмне надо делать два прохода, искать по столбцу user1, потом по столбцу user2 1. Не вижу в этом проблемы. Может быть проблемы будут в других запросах? 2. Один и тот же пользователь может быть указан в одной записи и в user1, и в user2? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 08:23 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitchL.OtujktdСудя по задаче планируется хранить граф связей между объектами? Да точно, это не ориентированный граф получается по структуре. С нюансом, что кроме самого наличия или отсутствия ребра графа, мне надо хранить еще информацию, описывающую каждое существующее ребро В таком случае надо данные отделять от структуры графа. Чтобы при изменении структуры можно было не трогать сами данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 08:24 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitchМне надо выбрать все связи имеющиеся у "петя", вне зависимости от того попал ли петя в user1 или в user2, нужный результат запроса в этом примере: вася, hash1 коля, hash2 Код: sql 1. 2.
При этом как бонус сохраняется информация является ли петя активным или пассивным партнёром в связи. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 12:57 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitchВариант3: Чтобы избежать дублирования, и сохранить симметрию можно использовать вариант с 2мя таблицами: 1) id, данные 2) user, id в таблице с общими данными Тут и симметрия, и нет избыточного хранения данных тут нет так называемой симметрии. Тут всяко-разно множественность. Можно запросто к одному id привязать десяток пользователей. А можно никого не привязать. На всё это надо писать дополнительные проверки. Да и избыточность тоже присутствует. Из-за которой собственно и получается что даже простейший запрос, получается каким то громоздким Так что самое верное решение - "оператор OR" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 13:16 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitchМне надо сохранять в базу связь двух пользователей между собой, и данные по этой связи. Вариант1: Все в одной таблице user1, user2, данные Проблема возникает в выборках, если я хочу найти все записи по какому то пользователю, мне надо делать два прохода, искать по столбцу user1, потом по столбцу user2 А джоины с другими таблицами вообще кошмар. И кстати, ты зря думаешь, что выборка в два прохода Код: sql 1. 2. 3. 4. 5.
намного тяжелее чем если использовать другой вариант Совсем не тяжелее, а в общем-то даже наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 13:32 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
Mr.FontaineСовсем не тяжелее, а в общем-то даже наоборот. Ну, может, у него индексов на user1 и user2 нет, тогда будет два full scan-а. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 13:36 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitch, Делаете вьюху, в ней запрос наподобие того, что привел Mr.Fontaine, и ее уже используете в джойнах с другими таблицами. Производительность может сильно зависеть от конкретной СУБД: например, в MSSQL вариант с UNION ALL предпочтительнее варианта с OR практически всегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 15:31 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
Возможен еще вариант 1 таблица связи id, Данные 2 таблица список user для связи поле для id первой таблицы, id таблицы User такая структура позволит иметь для каждой связи 2 и более user ))) Ну и запроc с exist ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 15:36 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
RissВозможен еще вариант 1 таблица связи id, Данные 2 таблица список user для связи поле для id первой таблицы, id таблицы User такая структура позволит иметь для каждой связи 2 и более user ))) Ну и запроc с exist В первом посте у меня же этот вариант и описан вроде как "Вариант3" Я об этом не думал ранее, но действительно такая структура позволит иметь для каждой связи произвольное количество user.. включая кстати и 1. Что открывает дополнительный простор для ошибок в данных. В идеале хотелось бы на уровне БД установить, что у каждой связи могут быть ровно 2 user, ни больше ни меньше, и еще они должны быть разными. Всем кстати спасибо за ответы. Получается, что "Вариант1" - это рекомендуемый метод для такой структуры данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 20:26 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
RissВозможен еще вариант 1 таблица связи id, Данные 2 таблица список user для связи поле для id первой таблицы, id таблицы User такая структура позволит иметь для каждой связи 2 и более user ))) Ну и запроc с exist Годная схема, кстати :)Реализовать вставку связи через хранимку и там валидацию реализовать ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 22:52 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
L.OtujktdRissВозможен еще вариант 1 таблица связи id, Данные 2 таблица список user для связи поле для id первой таблицы, id таблицы User такая структура позволит иметь для каждой связи 2 и более user ))) Ну и запроc с exist Годная схема, кстати :)Реализовать вставку связи через хранимку и там валидацию реализовать Совсем даже негодная: во-первых, она описана у автора тем в первом посте, и она ему уже тогда не нравилась. Ибо как ты сам и пишешь, что структура позволит хранить любое количество user. Довольно часто мероприятия (хоть игры, хоть спорт) должны иметь определённое количество участников. И возможность записи произвольного количества просто недопустима. У автора темы это количество равно двум. Ни больше, ни меньше. во-вторых, реализация вставки через хранимку тоже вызывает сомнения, ибо как запретить прямой insert в таблицу для связей? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 06:36 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
Mr.Fontaineреализация вставки через хранимку тоже вызывает сомнения, ибо как запретить прямой insert в таблицу для связей? Это-то легко делается правильной раздачей прав. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 12:35 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
Mr.Fontaineибо как запретить прямой insert в таблицу для связей? Прямые операции с данными должны быть запрещены всегда, поддержание данных в правильном для бизнеса состоянии это задача приложения в целом и рассматривать таблицу в СУБД как нечто автономное не стоит, особенно не стоит реализовывать проверку сложных ограничений на триггерах, правильность данных обеспечивается и проверяется там где реализована бизнес логика. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 12:43 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
AkaMitchМне надо сохранять в базу связь двух пользователей между собой, и данные по этой связи. Вариант1: Все в одной таблице user1, user2, данные Ну, это конечно самый лучший вариант, одно не понятно, в поле какого типа будут храниться ДАННЫЕ... Надесь, TEXT ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 13:23 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
USER_LINK ( userlink_id, ....) USER_LINK_USER (userlink_id, user_id) USER_LINK_DATA_INT (userlink_id, data int) USER_LINK_DATA_CHAR (userlink_id, data varchar) и так далее... Правда, я боюсь, что будет "джоины с другими таблицами вообще п#$@ц" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 13:27 |
|
Симметричность структуры данных
|
|||
---|---|---|---|
#18+
MasterZivAkaMitchМне надо сохранять в базу связь двух пользователей между собой, и данные по этой связи. Вариант1: Все в одной таблице user1, user2, данные Ну, это конечно самый лучший вариант, одно не понятно, в поле какого типа будут храниться ДАННЫЕ... Надесь, TEXT ? user1, user2 - INT, айдишники пользователей из таблицы с даными по пользователям. данные - в реальности это 2 поля ip + datatime ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 17:18 |
|
|
start [/forum/topic.php?fid=32&fpage=4&tid=1539911]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 161ms |
0 / 0 |