|
|
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоЭто не словоблудство, а именно особенности реализации ПИ Эти особенности В рамках модели данных или ЗА ними? Напоминаю, мы находимся в "Проектировании БД". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 16:58 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Как можно было не понять столько четко сформулированный вопрос? 1. Согласно задаче автора, у работы может быть сколь угодно много подразделений (фактически, больше нуля), но обязательно есть одно главное подразделение. 2. Подразделения Б и В не являются главными. 3. Главным является подразделение А. 4. Есть желание главное подразделение указать ПОСЛЕДНИМ среди всех подразделений. До этого никаких главных подразделений нет, ни Б ни В им быть не может. Это не какая-то фантастическая ситуация. Например, главным подразделением является контролирующее подразделение, какое именно оно будет - заранее неизвестно (ОТК). То есть это вполне житейская ситуация, не выходящая за рамки задачи автора. Если с точки зрения предметной области допустимо отсутствие главного подразделения (заранне неизвестно, но станет известно потом), то тогда поле будет необязательным Вы забыли добавить условие ", чтобы я его понял". Юмор твой я не понял :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 17:11 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоЕсли с точки зрения предметной области допустимо отсутствие главного подразделения (заранне неизвестно, но станет известно потом), то тогда поле будет необязательным Потребуется дополнительная проверка на стадии, когда для работы необходимо будет точно знать главное подразделение. Видимо, она будет реализована в виде сообщения об ошибке юзеру "выберите главное подразделение из перечня подразделений", когда тот начнет печатать, например, наряд на работу. Напоминаю про негативное отношение автора вопроса к ручному коду SQL, а также про старика Оккама. Сравните с простейшим решением "npp=0 только для главного подразделения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 18:11 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Ну так его npp=0 тоже ведь нужно устанваливатью и заранне тоже может быть неизвестно какое главное. Как в этом случае использование npp=0 может облегчить жизнь? Не говоря уже о том что пользователь по не знанию или намеренно может ввести несколько главных из-за чего, например, перестанет рабоать часть функционала. Что тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 18:39 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоНу так его npp=0 тоже ведь нужно устанваливатью и заранне тоже может быть неизвестно какое главное Это не принципиально, важно только наличие детерминированной сортировки и принципиальной возможности установить/добавить любое подразделение главным в любой момент, если только заранее сильно не обгадиться. Под "обгадиться" я здесь понимаю, например, установить неглавное подразделение со значением npp=maxint и договоренностью, что главным считается первое подразделение в соответствии с сортировкой order by npp desc,id (это еще и намек, что логику сортировки можно немного "подвигать", пока решение не принято), так что главное со значением maxint+1 уже не удастся вставить. В этом смысле использовать в качестве главного подраздедления запись с максимальным значением npp может оказаться удобнее, даже можно в известной степени npp формировать полуавтоматически начиная с маленьких целых значений. Все очень простоКак в этом случае использование npp=0 может облегчить жизнь? Не говоря уже о том что пользователь по не знанию или намеренно может ввести несколько главных из-за чего, например, перестанет рабоать часть функционала. Что тогда? Из "npp=0 только для главного подразделения" не следует, что "если у подразделения npp=0, то оно главное". Понятно, что тонкости начинаются в тот момент, когда у двух подразделений с претензиями на главенство одинаковое значение npp (и в ощем случае не обязательно равное нулю). А облегчить жизнь это может существенно. Смысл в том, что подчас формализовать что-то сложнее, чем только лишь объяснить это юзеру. Пользователи обычно знают, какое подразделение главное, а какое - нет. И если человек внес неглавное подразделение с npp=0, или два разных человека внесли (каждый свое, как кто думал) главные подразделения с npp=0, главным будет только одно, зато видно будет, кто как и почему обгадился. А то, что перестанет работать часть функционала, как-то не верится, если только заранее не делать слишком сильных допущений. Также как и в Вашем случае, в том месте, где определяется главное подразделение, логика определения главного подразделения должна быть единой. Пусть это отдельное поле, пусть это функция - пока что не принципиально. Важно только, чтобы алгоритм определения главного подразделения возвращал детерминированный результат, не зависящий от настроения админа, фазы луны и тонкостей поднятия дампа. Если это будет реализовано - ничего никогда не отъедет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 09:38 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Я считаю дурным тоном зашивать ассосиации между сущностями (связи) в логику приложения. Очень сложно будет поддерживать такую систему. ИМХО предметная область по возможности должна по максимуму отражаться в модели данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 11:22 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоЯ считаю дурным тоном зашивать ассосиации между сущностями (связи) в логику приложения. Очень сложно будет поддерживать такую систему. ИМХО предметная область по возможности должна по максимуму отражаться в модели данных. В данном сообщении есть внутреннее противоречие. Оно заключается в том, что модель данных всегда зашита в логику приложения. Поэтому деваться некуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 12:39 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
А вот здесь я тебя не понял. Каким это образом в моем варианте связь "Главное подразделение" зашито в логику приложения? Это же декларативный констрейнт на уровне базы данных и он ни каким образом не зависит ни от какой логики никакого приложения. Это же модель данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 12:56 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов... модель данных всегда зашита в логику приложения...Обычно считается, что МД отделена от приложения. Поясните, пожалуйста Честно говоря, я тоже не до конца понял Ваше решение. Имеем две записи с npp=0. По Вашему - вполне законно. 1. id_cust = 1 2. id_cust = 2 Какое из них главное - то, которое вернет сервер по top 1?.. с order by по какому аттрибуту?.. Ну, допустим, он вернет c id_cust=1, но тут юзер посчитал, что это неправильно, какие ему сделать движения, чтобы главным стал id_cust=2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 12:59 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоА вот здесь я тебя не понял. Каким это образом в моем варианте связь "Главное подразделение" зашито в логику приложения? Очевидно, в приложении есть ОТДЕЛЬНОЕ ВЫДЕЛЕННОЕ ПОЛЕ для отображения и редактирования ссылки на главное подразделение. Это поле специально сделано для главного подразделения, и если поля в интерфейсе нет, а в модели оно есть, никому от этого легче не станет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 13:01 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperОбычно считается, что МД отделена от приложения Не знаю, кем это так считается. По-вашему, любое приложение может работать на любой МД? Sgt.PepperКакое из них главное - то, которое вернет сервер по top 1?.. с order by по какому аттрибуту?.. Я же писал примеры. Например, order by npp, id_cust. Или другие, например, с npp desc. Важно только, чтобы npp было первым полем, и чтобы комбинация полей была уникальна. Sgt.PepperНу, допустим, он вернет c id_cust=1, но тут юзер посчитал, что это неправильно, какие ему сделать движения, чтобы главным стал id_cust=2? Очевидно, раз на значение id_cust повлиять нельзя, то надо изменять npp. Например, уменьшить у главного или увеличить у неглавного, если сортировка по npp по возрастанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 13:05 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовПо-вашему, любое приложение может работать на любой МД? По моему с МД (а лучше сказать просто РБД) может работать несколько приложений именно потому что данные отделены от приложений и это считается большим достижением в инфотехнологиях. Для Вас это новость? Сергей ВаскецовОчевидно, раз на значение id_cust повлиять нельзя, то надо изменять npp. Например, уменьшить у главного или увеличить у неглавного, если сортировка по npp по возрастанию. Так решения нет?.. Вы на ходу придумываете?.. Ну вот Вы говорите в приложении будет поле для главного подразделения. Какие действия с вышеуказанной таблицей должны произойти при его (поля) изменении?.. по шагам, для тупых, пожалуйста... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 13:18 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperПо моему с МД (а лучше сказать просто РБД) может работать несколько приложений именно потому что данные отделены от приложений и это считается большим достижением в инфотехнологиях. Для Вас это новость? Сравните с тем, что Вы написали Выше ("Обычно считается, что МД отделена от приложения"). По-вашему, данные и модель данных - это одно и то же? Sgt.Pepper Сергей ВаскецовОчевидно, раз на значение id_cust повлиять нельзя, то надо изменять npp. Например, уменьшить у главного или увеличить у неглавного, если сортировка по npp по возрастанию. Так решения нет?.. Вы на ходу придумываете?.. Вообще-то в моем предложении ИЛИ разделяет 2 возможных решения, выбирайте любое, какое нравится. Результат - нужное подразделение станет главным - в обоих случаях будет достижим. И придумываю я не находу, а уже как 2-ю страницу пытаюсь это донести для неумеющих пользоваться глазами и мозгом. Sgt.PepperНу вот Вы говорите в приложении будет поле для главного подразделения. Какие действия с вышеуказанной таблицей должны произойти при его (поля) изменении?.. по шагам, для тупых, пожалуйста... :) Я как раз не говорил, что надо делать отдельно поле для главного подразделения, если это только для галочки, что оно "главное". Но если уж хотите, то при его изменении, видимо, должно выполняться нечто типа update rabota set id_main_cust=N where id_rabota=M. За один шаг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 13:37 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовПо-вашему, данные и модель данных - это одно и то же? Играть словами и флеймить не будем :) Сергей ВаскецовЯ как раз не говорил, что надо делать отдельно поле для главного подразделения, если это только для галочки, что оно "главное". А здесь? Сергей ВаскецовНо если уж хотите, то при его изменении, видимо, должно выполняться нечто типа update rabota set id_main_cust=N where id_rabota=M. За один шаг. Тут я вообще перестал понимать о чем речь. Ведь началось все с обсуждения вот этой таблицы vitaliy14Нет еще ничего таблицы пустые! Т.е. по пунктам Таблица Работа-ПЗ (подразделение заказчика) ---------------------------------------------- ID_JOB_Customer ID_JOB ID_Customer NPP И Вы утверждали, что атрибут IS_MAIN ни к чему - мы, мол, с помощью top 1 и order by и так выясним кто там MAIN... Здесь А теперь "update rabota set id_main_cust=N where id_rabota=M"? Как все запуталось!.. Так этих атрибутов не достаточно, нужен все-таки id_main_cust?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 14:14 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperКак все запуталось! Отмечу, после Вашей неверной предпосылки "Ну вот Вы говорите в приложении будет поле для главного подразделения". В случае процитированной Вами таблицы с NPP никакого отдельного поля "Главное подразделение" нет ввиду его ненужности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 14:17 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Sgt.Pepper Сергей ВаскецовЯ как раз не говорил, что надо делать отдельно поле для главного подразделения, если это только для галочки, что оно "главное". А здесь? Это было развитие "конкурирующей" идеи. За нее пусть отвечает ее автор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 14:18 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Я настаиваю что для связи "Главное подразделение" необходимо отдельное поле(внешний ключ). И нужно чтобы пользователь ЯВНО указывал главное подразделение в соотвествии с моделью данных, а не выдумывать какой-то порядок и по нему определять главное подразделение. Это не логично, не очевидно и никак не отражается в модели данных а хранится только в логике приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 14:28 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Sgt.PepperКак все запуталось! Отмечу, после Вашей неверной предпосылки "Ну вот Вы говорите в приложении будет поле для главного подразделения". В случае процитированной Вами таблицы с NPP никакого отдельного поля "Главное подразделение" нет ввиду его ненужности. Просто прелесть!.. Так значит "update rabota set id_main_cust=N" вернет ошибку?.. ОК, но что-то есть, что помогает юзеру сказать "А вот это будет главное"?.. По-моему у Вас вышло бы быстрее если бы Вы вместо последних двух страниц описали последовательность действий :) ну типа: 1. Создаем таблу с полями... бла-бла-бла 2. При добавлении юзером работы... бла-бла-бла 3. При смене главного подразделения... бла-бла-бла 4. .............. 5. .............. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 14:30 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоникак не отражается в модели данных а хранится только в логике приложения. Пожалуй, я пасану. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 14:33 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоЯ настаиваю что для связи "Главное подразделение" необходимо отдельное поле(внешний ключ). И нужно чтобы пользователь ЯВНО указывал главное подразделение в соотвествии с моделью данных, а не выдумывать какой-то порядок и по нему определять главное подразделение. Это не логично, не очевидно и никак не отражается в модели данных а хранится только в логике приложения. согласен, пока что идея Сергея выглядит чем-то весьма экзотическим... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 14:33 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperПросто прелесть!.. Так значит "update rabota set id_main_cust=N" вернет ошибку?.. Смех без причины? Sgt.PepperОК, но что-то есть, что помогает юзеру сказать "А вот это будет главное"?.. Да. В перечне подразделений оно будет первым. Или последним. Как захотите. Если сделать функцию, возвращающую по работе ее главное подразделение, можно и отдельно его отображать. Sgt.PepperПо-моему у Вас вышло бы быстрее если бы Вы вместо последних двух страниц описали последовательность действий :) По-моему, кто хотел, уже все давно понял. И таблица, и что делать - все давно написано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 14:39 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовСмех без причины? Не, ну правда, Сергей, почему без причины. Вы написали update, который использует несуществующие поля типа id_main_cust. Или оно нужно? Ответьте определенно и тогда разговор можно продолжать в серьезном ключе, без смеха... Сергей ВаскецовПо-моему, кто хотел, уже все давно понял. И таблица, и что делать - все давно написано. Это вообще в стиле ЧАЛа, хоть (с) ставь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 14:49 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Sgt.Pepper Сергей ВаскецовСмех без причины? Не, ну правда, Сергей, почему без причины. Вы написали update, который использует несуществующие поля типа id_main_cust. Или оно нужно? Ответьте определенно и тогда разговор можно продолжать в серьезном ключе, без смеха... Вы считаете, что каждому новоприходящему в топик я должен все разжевать по новой? Попробуйте прочитать все, невзирая на многабукав. Если это не поможет понять, почему и когда работает то, что я предлагаю, очевидно, объяснение, что нельзя выдергивать фразы из контекста и путать два разных контекста Вам тоже не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 14:58 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовВы считаете, что каждому новоприходящему в топик я должен все разжевать по новой? Попробуйте прочитать все, невзирая на многабукав. Если это не поможет понять, почему и когда работает то, что я предлагаю, очевидно, объяснение, что нельзя выдергивать фразы из контекста и путать два разных контекста Вам тоже не поможет. Да прочитал я все Ваши многабуков Здесь Вы несколько снисходительно заявили, что есть методы попроще, без IS_MAIN-ов А вот здесь сами его фактически стали использовать в update Не надо ничего разжевывать по новой, просто скажите (да/нет) нужен атрибут id_main_cust в таблице Работа-ПЗ (подразделение заказчика) ---------------------------------------------- ID_JOB_Customer ID_JOB ID_Customer NPP ? Если да/нет опять не прозвучит будем считать "методы попроще" несостоятельными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 15:14 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Sgt.Pepperпросто скажите (да/нет) нужен атрибут id_main_cust в таблице Работа-ПЗ (подразделение заказчика) ---------------------------------------------- ID_JOB_Customer ID_JOB ID_Customer NPP ? не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2008, 16:57 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35465701&tid=1543731]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
189ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
88ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 573ms |

| 0 / 0 |
