|
|
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Kirill RazuvaevКак хранить - не вопрос. Однозначно - в БД! :-)) Основной вопрос в том, как определить правильное с учетом аппаратной коммутации и переконфигурации системы. Я бы поставил вопрос так - как часто происходит переконфигурация системы и как долго расчитывать направление движения тока? Если редко меняется направление и расчет долог - проще update-ить граф. Но расчет "на лету" имеет преимущество - он не зависит от того запускали процедуру пересчета или забыли. Меньше шансов нарваться на логическую нестыковку данных. Что касается нормализации структуры - то тут обсуждать вобще нечего. от добавления поля "направление" нормализация не пострадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2008, 10:57 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
BelyЧто касается нормализации структуры - то тут обсуждать вобще нечего. от добавления поля "направление" нормализация не пострадает. Не знаю, как на счёт НФ, но некое дублирование появляется. Хранится состояние коммутации - оно-то и определяет направление тока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2008, 12:37 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
BelyЕсли так хочется хранить направление тока, то проще всего будет добавить к структуре графа еще одно поле - направление. Прямое (совпадает с направлением ребра START->FINISH) и обратное. Вы не совсем поняли. Вопрос в том, чтобы организовать схему БД так, чтобы "запитанные" подсистемы (они же фидеры) можно было обойти одним CTE запросом и избежать "зацикливания" рекурсии. В чем польза, спросите Вы? Например, одним запросом можно узнать: 1) к какому источнику подключен потребитель (обратное направление обхода) и список потребителей (прямое направление обхода); 2) проверить возможность подачи напряжения на участок, где проводятся работы; 3) ... да мало ли еще чего, можно узнать ;-) goodronИмхо, никак нельзя описать движение тока в БД. Точнее можно, например, каким-нибудь битовым полем, но лучше этого не делать. Не надо описывать движение тока, задача в том, чтобы описать саму сеть и организовать учет потребеления электроэнергии. А битовое поле - это точно денормализация. То же самое относится и к словам Bely'го. goodronКроме того, наличие напряжения <> наличию тока. Напряжение может быть, а вот тока может и не быть (нагрузка = 0).Пусть тока и не будет. Направленность дуги в данном случае будет указывать, куда БЫ он пошел, если бы нагрузка имелась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2008, 13:35 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Николай1 Николай1Да ладно. Уравнение Кирхгофа - и направление в кармане. В комплексных переменных, разумеется :) Ой, не пугайте, пуганные мы Приходилось брать уравнения в комплексных переменных, пусть и не Кирхгоффа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2008, 13:38 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Senya_LВы не совсем поняли. Вопрос в том, чтобы организовать схему БД так, чтобы "запитанные" подсистемы (они же фидеры) можно было обойти одним CTE запросом и избежать "зацикливания" рекурсии.Зацикливание рекурсии можно избежать двумя способами: 1) Если построенный граф является деревом (или подграф является деревом) с вершиной в точке откуда считаем. 2) Построением кратчайшего пути от точки к точке в ориентированном графе. первый вариант - он зависит от реальной топологии. Если она НЕ ПОДХОДИТ под это условие, то вы ничего с этим не сделаете. Это означает, что есть источники, которые получают электричество из двух или более источников. Второй вариант - алгоритмический. Алгоритмы поиска кратчайших путей - существуют и описаны в теории графов, вот только их реализация с помощью SQL запросов крайне неэффективна. Senya_LВ чем польза, спросите Вы? Например, одним запросом можно узнать: 1) к какому источнику подключен потребитель (обратное направление обхода) и список потребителей (прямое направление обхода); С учетом сказанного выше - ответ может быть получен "к каким источникам (множественное число)". Если такого не бывает - то откуда вобще может взяться зацикливание? Ну и почему вы упираетесь именно на SQL запрос? Почему эту информацию нельзя выдать с помощью хранимых процедур? Senya_L3) ... да мало ли еще чего, можно узнать ;-)Для того, чтобы понять степень проблемы - хорошо бы знать "чего еще хочется знать". Если вам необходимо знать только пути между потребителями энергии и генераторами энергии, то вы можете заблаговременно рассчитать все пути и сохранить их в БД. Это будет денормализация, зато сможете получать данные одним запросом кто к кому подключен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2008, 14:09 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Senya_L Николай1 Николай1Да ладно. Уравнение Кирхгофа - и направление в кармане. В комплексных переменных, разумеется :) Ой, не пугайте, пуганные мы Приходилось брать уравнения в комплексных переменных, пусть и не Кирхгоффа. В смысле? Я как раз в смысле, что все очень просто. Берешь свою систему, строишь по ней систему уравнений, решаешь, и вот тебе направления токов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2008, 17:42 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Belyоткуда вобще может взяться зацикливание? +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2008, 18:13 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Типа не хочется заводить отдельную таблицу пройденных объектов или линков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2008, 18:19 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Тогда действительно можно добавить поле "Пройден/не пройден" и в СТЕ в условии на объединение отсеивать "пройденные". Только перед каждым проходом нужно будет всё апдейтить в 0 - "ничего не пройдено". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2008, 18:22 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Николай1В смысле? Я как раз в смысле, что все очень просто. Берешь свою систему, строишь по ней систему уравнений, решаешь, и вот тебе направления токов. Все не так просто. Учтите, что сеть распределительная и замкнутого контура не образует, что, насколько я помню, условие применимости ур-я Кирхгофа. Проще говоря, неизвестно нагрузка конечного потребителя. BelyЗацикливание рекурсии можно избежать двумя способами: .... первый вариант - он зависит от реальной топологии. Если она НЕ ПОДХОДИТ под это условие, то вы ничего с этим не сделаете. Есть и третий способ. Но сложен в реализации. Повторюсь, сеть распределительная, замкнутый контур не образует и существенной нагрузки в ней и быть не должно (это бы означало либо КЗ, либо этакий большоооой нагревательный элемент :)). Каждая дуга графа по сути обозначает три проводника тока, так как кол-во фаз три. Я считаю, что возможно ориентировать дуги таким образом, чтобы обеспечить обход фидера на уровне SQL. При этом одна и та же вершина может в итоговую выборку попасть и не один раз, но зацикливания не произойдет. Если все же произошло, то такая сеть не функциональна. Конечно, неплохо, когда бизнес правило обеспечивается уже на уровне структуры, но .... Сложности в реализации и неизвестно, какова будет эффективность SQL-запросов. goodronТипа не хочется заводить отдельную таблицу пройденных объектов или линков? Не хочется заводить временные таблицы и в цикле "запихивать" в них пройденные вершины и дуги. авторТогда действительно можно добавить поле "Пройден/не пройден" и в СТЕ в условии на объединение отсеивать "пройденные". Только перед каждым проходом нужно будет всё апдейтить в 0 - "ничего не пройдено". К сожалению, нет средств для одновременной выборки и апдейта записей. Хотя нет, есть - курсоры или хранимки. Это зависит от используемой СУБД. Подводя итоги, скажу, что Кирилл Разуваев, скорее всего, прав. Такие вещи надо делать на клиенте. Меньше будет необходимости прибегать к проктологии. Пожалуй, тему можно закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2008, 09:06 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
1) А направление вектора (направления тока) при задании графа нельзя задать ? 2) И попробовать после этого CTE )) ______________________________________________________ Давайте считать обступившее нас со всех строн коричневое море шоколадным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2008, 17:32 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Senya_L Все не так просто. Учтите, что сеть распределительная и замкнутого контура не образует, что, насколько я помню, условие применимости ур-я Кирхгофа. Проще говоря, неизвестно нагрузка конечного потребителя. Добавляем суперисточник и суперсток - вот и замкнутый контур. Хотя существуют и другие алгоритмы для нахождения установившегося потока (в данном случае это электрический ток). Senya_L Не хочется заводить временные таблицы и в цикле "запихивать" в них пройденные вершины и дуги. Думаете будет медленно? Пробовали? Senya_L Подводя итоги, скажу, что Кирилл Разуваев, скорее всего, прав. Такие вещи надо делать на клиенте. Меньше будет необходимости прибегать к проктологии. Пожалуй, тему можно закрывать. Вобщем и целом согласен, но... Если нужно, к примеру, вывести таблицу (грид) в которой будет содержаться два поля: Имя источника, кол-во отпускаемой электроэнергии. Тогда всё передавать на клиента, вычислять и заново пихать в грид? В данном случае реализация Вашей идеи очень пригодилась бы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2008, 17:37 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
shelsoft1) А направление вектора (направления тока) при задании графа нельзя задать ? "...задании графа.." - это построение его? В смысле, ввод начальных данных? Представим, что объектов в сети > 1000. ЛЭП рисуются ("задаётся граф") пользователем. Откуда он знает, как будет течь ток? Ведь всё зависит от того, как произведет переключение диспетчер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2008, 17:40 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
goodron 1) Если вы тянули проводку у себя дома то вы знаете что электричество начинается "от счетчика" 2) Т. е. при нормальном построении базы это можно сделать автоматом 3) Однако есть вопрос резервных линии (и тут и "задача коммивояжера" и весовых коэффициентов векторов) однако опять же при выполнении п. 2. вероятно в 80% случаев обойтись одним CTE ______________________________________________________ Давайте считать обступившее нас со всех строн коричневое море шоколадным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2008, 20:07 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
shelsoft goodron 1) Если вы тянули проводку у себя дома то вы знаете что электричество начинается "от счетчика" 2) Т. е. при нормальном построении базы это можно сделать автоматом 3) Однако есть вопрос резервных линии (и тут и "задача коммивояжера" и весовых коэффициентов векторов) однако опять же при выполнении п. 2. вероятно в 80% случаев обойтись одним CTE Резервных линий не меньше, чем остальных. Не думаю, что можно сделать автоматом, т.к. "веса" на момент создания топологии зачастую неизвестны. Ну даже если и известно. Фактически вы автоматически хотите определить оптимальную схему. Т.е. расставить разрывы таким образом, чтобы потери электроэнергии были наименьшими. Правильно я понял? Это есть "Задача Коммивояжера"? (Насколько я помню, она NP-полная) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 13:46 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
goodron 1) Правильно поняли 2) Однако тут самое сложное при написании выборки определить условие что CTE не прошло и надо применять какой-нибудь свой эвристический механизм решения задачи 3) Для одной конторы я писал нечто такое для определения движения по "связям" между людьми, так порядка 70% запросов проскакивали одним СТЕ на ура, однако при наступлении ряда условий подставлялся другой гораздо более затратный механизм поиска ______________________________________________________ Давайте считать обступившее нас со всех строн коричневое море шоколадным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 14:06 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
shelsoft 1) Правильно поняли это хорошо shelsoft 2) Однако тут самое сложное при написании выборки... Прежде чем писать выборку, нужно уметь задавать направление тока. Я так и не понял, как вы решали (или предлагаете) эту задачу. Допустим у нас нарисован кусок схемы (см вложение). Яч 1 и Яч 19 - это источники эл. тока. Трансформаторы - это нагрузка (потребители). Где здесь должен будет потечь ток? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 16:22 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Я могу для этой схемы посчитать, где потечёт ток при определенном состоянии коммутации. Но как посчитать, где он "должен" течь - я не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 16:26 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
goodron 1) Интересное условие (с точки зрения графов не решал) 2) Буду думать применительно к своим условиям 3) Спасибо ______________________________________________________ Давайте считать обступившее нас со всех строн коричневое море шоколадным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 21:16 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Senya_L Николай1В смысле? Я как раз в смысле, что все очень просто. Берешь свою систему, строишь по ней систему уравнений, решаешь, и вот тебе направления токов. Все не так просто. Учтите, что сеть распределительная и замкнутого контура не образует, что, насколько я помню, условие применимости ур-я Кирхгофа. Проще говоря, неизвестно нагрузка конечного потребителя. Как так? Я думал, что максимальная нагрузка не то, что бы, известна, а как бы даже прописана? И за превышение - по башке? (в квартирах - по предохранителю). Senya_L BelyЗацикливание рекурсии можно избежать двумя способами: .... первый вариант - он зависит от реальной топологии. Если она НЕ ПОДХОДИТ под это условие, то вы ничего с этим не сделаете. Есть и третий способ. Но сложен в реализации. Повторюсь, сеть распределительная, замкнутый контур не образует и существенной нагрузки в ней и быть не должно (это бы означало либо КЗ, либо этакий большоооой нагревательный элемент :)). Каждая дуга графа по сути обозначает три проводника тока, так как кол-во фаз три. Я считаю, что возможно ориентировать дуги таким образом, чтобы обеспечить обход фидера на уровне SQL. При этом одна и та же вершина может в итоговую выборку попасть и не один раз, но зацикливания не произойдет. Если все же произошло, то такая сеть не функциональна. Конечно, неплохо, когда бизнес правило обеспечивается уже на уровне структуры, но .... Сложности в реализации и неизвестно, какова будет эффективность SQL-запросов. goodronТипа не хочется заводить отдельную таблицу пройденных объектов или линков? Не хочется заводить временные таблицы и в цикле "запихивать" в них пройденные вершины и дуги. авторТогда действительно можно добавить поле "Пройден/не пройден" и в СТЕ в условии на объединение отсеивать "пройденные". Только перед каждым проходом нужно будет всё апдейтить в 0 - "ничего не пройдено". К сожалению, нет средств для одновременной выборки и апдейта записей. Хотя нет, есть - курсоры или хранимки. Это зависит от используемой СУБД. Подводя итоги, скажу, что Кирилл Разуваев, скорее всего, прав. Такие вещи надо делать на клиенте. Меньше будет необходимости прибегать к проктологии. Пожалуй, тему можно закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 22:08 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Прошу прощения за оверквотинг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 22:11 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
Николай1Как так? Я думал, что максимальная нагрузка не то, что бы, известна, а как бы даже прописана? И за превышение - по башке? (в квартирах - по предохранителю). Если бы всё было так... Чтобы было понятней, зайдем с другой стороны. Как узнать, какой номинал предохранителя поставить для нового потребителя? Или... Как изменится пропускная способность (максимальная нагрузка), если мы вот тут ещё одну ЛЭП проведём? ЗЫ: Это решается с помощью задачи нахождения максимального потока, а вот как решается задача нахождения оптимальной схемы - я пока не знаю :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 09:30 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
shelsoft 1) Интересное условие (с точки зрения графов не решал) 2) Буду думать применительно к своим условиям 3) Спасибо Вам тоже спасибо. Посмотрю применимость Комивояжера для этой задачи (хотя, если честно сомневаюсь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 09:32 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
goodronЕсли бы всё было так... Чтобы было понятней, зайдем с другой стороны. Как узнать, какой номинал предохранителя поставить для нового потребителя?А не потребитель должен заказывать нагрузку? А то мы ему воткнем предохранитель на 5, а ему надо 20... goodronИли... Как изменится пропускная способность (максимальная нагрузка), если мы вот тут ещё одну ЛЭП проведём?Дык - воткнуть эту ЛЭП в граф и посчитать. В чем проблема? goodronЗЫ: Это решается с помощью задачи нахождения максимального потока, а вот как решается задача нахождения оптимальной схемы - я пока не знаю :(Подозреваю, что эту задачу придется решать перебором разных вариантов. Надо только четко поставить критерии оптимальности и указать какие варианты недопустимы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 10:54 |
|
||
|
Сети. Вопрос по нормализации.
|
|||
|---|---|---|---|
|
#18+
BelyА не потребитель должен заказывать нагрузку? А то мы ему воткнем предохранитель на 5, а ему надо 20... Да, потребитель. Но возможность присоединения такой нагрузки тоже должна просчитываться. Это можно сделать. Просто объяснял откуда ноги растут. И, кстати, если даже сумма мощностей всех потребителей сети > кол-ва электроэнергии, которое может пропустить сеть, то зачастую всё равно дают добро. Т.к. всё сразу не включат. BelyДык - воткнуть эту ЛЭП в граф и посчитать. В чем проблема? Да ни в чём. Объяснял суть задачи. BelyПодозреваю, что эту задачу придется решать перебором разных вариантов. Надо только четко поставить критерии оптимальности и указать какие варианты недопустимы. Это не решение. Вариантов слишком много. Критерий "простой" - все должны получать запрошенную нагрузку и технические потери (нагрев проводов) должны быть минимальными. При этом каждый потребитель должен должен получать питание в данный момент времени только из одного источника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 11:15 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35572870&tid=1543641]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
174ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 525ms |

| 0 / 0 |
