|
Архитектурное решение
|
|||
---|---|---|---|
#18+
Есть таблица со списком компаний ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 14:32 |
|
Архитектурное решение
|
|||
---|---|---|---|
#18+
Есть таблица со списком компаний Код: sql 1. 2. 3. 4. 5. 6.
Каждая компания может быть пиром другой компании. Как правильно это спроэктировать? Думал про следующий вариант: Код: sql 1. 2. 3. 4. 5.
Но тогда возникает проблема отображения инфы. Если я хочу посмореть пиров компании А, то тогда мне придется делать два запроса, ибо компания А, можеть быть и в id_copmany_one, и в id_copmany_two. Терятся много времени на выполнение запроса и обработку на результата на стороне клиента (предварительные предположения). Может есть у кого-то другие, более адекватные идеи. P.S. Задача - вбить short_name компании и получить всех её пиров. Желательно решение в 3НФ. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 14:42 |
|
Архитектурное решение
|
|||
---|---|---|---|
#18+
Создавать для каждой компании список своих пиров мне кажется неэфективным так как не гарантируется целостность данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 14:45 |
|
Архитектурное решение
|
|||
---|---|---|---|
#18+
chipakunos, а по русски всё то же самое можешь ? если нет -- то попробуй математически точно, скольконаправленный граф , например, как на нем с петлями, и т.п. особостями Или всё ограничено обычным деревом ? если не фтыкаешь -- прочитай букварь https://ru.wikipedia.org/wiki/Дерево_(теория_графов) а то "пир" по русски -- это пафосный коллективный обряд насыщения и пития. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 15:02 |
|
Архитектурное решение
|
|||
---|---|---|---|
#18+
chipakunos…Если я хочу посмореть пиров компании А, то тогда мне придется делать два запроса , ибо компания А, можеть быть и в id_copmany_one, и в id_copmany_two. Почему два? Если не думать, а делать тупо, можно, напр., поступить так: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 15:05 |
|
Архитектурное решение
|
|||
---|---|---|---|
#18+
Ы2, ну, именно этот запрос я и имел ввиду. Именно такое решение мне кажется не эфективным и прямолинейным. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 15:12 |
|
Архитектурное решение
|
|||
---|---|---|---|
#18+
qwwq, прошу прощения за слэнг, невнимательность с моей стороны. Под пирами подразумивается компании, которые между собой похожи. Над постановкой задачи в математической форме работаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 15:45 |
|
Архитектурное решение
|
|||
---|---|---|---|
#18+
chipakunos, как я понял, вас интересует двунаправленные ("равноправные") связи (если А -"пир" И <=> то Б - "пир" А) но корткие -- т.е. без наследования (из [А пир Б и Б пир С] не следует что [А пир С]) //если все не так , то дальнейшее не к вам. тогда запись в виде таблицы связей с 2-мя узлами и ограничением ид_Узла_1>ид_узла_2 (чтобы не повторяться) вас вполне устроит. оффтопЗадача полностью идентична задаче о записи бухгалтерских проводок. там есть как адепты полупроводок (в нашем случае это было бы либо полным дублированием таблицы связей зеркальными записями, что чревато нарушением симметрии, если мы как--то не позаботимся о синхронности вставки симметричных связей ,или же таблицы узлов связей из суррогата ид связи с каждым узлом (что чревато появлением связи с количеством связуемых не равных 2--м, если об этом опять таки специально не позаботиться) ) ,так и адепты полных проводок (как завещал ещё пачоли) -- в нашем случае -- только одной записи о связи, с извлечением всего чего угодно через предложенные выше юнионы. мне лично юнионы кажутся более естественными. как автогарантия связи 2-х и только 2-х узлов каждой "связью". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 16:13 |
|
Архитектурное решение
|
|||
---|---|---|---|
#18+
qwwqchipakunos, как я понял, вас интересует двунаправленные ("равноправные") связи (если А -"пир" Б <=> то Б - "пир" А) но корткие -- т.е. без наследования (из [А пир Б и Б пир С] не следует что [А пир С]) //если все не так , то дальнейшее не к вам. тогда запись в виде таблицы связей с 2-мя узлами и ограничением ид_Узла_1>ид_узла_2 (чтобы не повторяться) вас вполне устроит. оффтопЗадача полностью идентична задаче о записи бухгалтерских проводок. там есть как адепты полупроводок (в нашем случае это было бы либо полным дублированием таблицы связей зеркальными записями, что чревато нарушением симметрии, если мы как--то не позаботимся о синхронности вставки симметричных связей ,или же таблицы узлов связей из суррогата ид связи с каждым узлом (что чревато появлением связи с количеством связуемых не равных 2--м, если об этом опять таки специально не позаботиться) ) ,так и адепты полных проводок (как завещал ещё пачоли) -- в нашем случае -- только одной записи о связи, с извлечением всего чего угодно через предложенные выше юнионы. мне лично юнионы кажутся более естественными. как автогарантия связи 2-х и только 2-х узлов каждой "связью". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 16:16 |
|
Архитектурное решение
|
|||
---|---|---|---|
#18+
chipakunosЫ2, ну, именно этот запрос я и имел ввиду. Именно такое решение мне кажется не эфективным и прямолинейным. Это один запрос, выполняемый на сервере, что обычно эффективнее утягивания массы данных для обработки на клиенте. Прямолинейность же вообще не критерий. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2017, 17:12 |
|
Архитектурное решение
|
|||
---|---|---|---|
#18+
Ы2, Спасибо за ответы, просто у меня есть постоянно некое недоверие к своим решениям. Вот и уточняю здесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 15:08 |
|
|
start [/forum/topic.php?fid=53&msg=39453915&tid=1996510]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 304ms |
total: | 444ms |
0 / 0 |