|
|
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
О какой избыточности идет речь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 15:51 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоА если хранить ссылку на элемнт перечня работ ? Проверять ничего не надо это БД проверяет. И при удалении "главного" подразделения из перечня работ...? Все очень простото 2-й вообще ничего не будет гарантировать, т.е. будем иметь несоклько главных подразделений Лучше сначала разобраться, а потом критиковать. Подразделение главное всегда одно. Все очень простотрудно(много кода, накладно для базы) реализуемый Что-то я не понял. Надо написать один раз index и поправить запрос получения главного подразделения в части добавления top 1. Это сложно? Это сложнее, чем писать "по уму" триггер, что светит автору, если проверку нельзя сделать constraint-ом? Все очень простоНасколько я понял мы говорим о многопользовательском домтупе к БД. Многопользовательское чтение? Многопользовательское редактирование состава подразделений в рамках одной работы? Продолжать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 15:54 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
vitaliy142 вариант - проблем с редактированием нет, но прийдется на клиенте проверять,чтобы пользователи два ПЗ не сделали главными Главное подразделение может быть всегда только одно даже в том случае, если два значения npp в перечне подразделений совпадают. Просто в этом случае для его определения потребуется использовать еще одно поле (гарантированно уникальный хотя бы в рамках одной работы идентификатор). Например, select top ... order by ... Идея тривиальная же. Важно только, чтобы можно было всегда сказать, какое главное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 15:58 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Все очень простоА если хранить ссылку на элемнт перечня работ ? Проверять ничего не надо это БД проверяет. И при удалении "главного" подразделения из перечня работ...? А также является ли ссылка (главное подразделение) на "дочерний" перечень с подразделениями обязательным полем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 16:00 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Все очень простоА если хранить ссылку на элемнт перечня работ ? Проверять ничего не надо это БД проверяет. И при удалении "главного" подразделения из перечня работ...? Можно устанавливать в NULL средствами БД (.. on delete set NULL) Все очень простото 2-й вообще ничего не будет гарантировать, т.е. будем иметь несоклько главных подразделений Лучше сначала разобраться, а потом критиковать. Подразделение главное всегда одно. Т.е. ты хочешь сказать что если их будет несколько то главным выберется тот , который понравиться серверу TOP 1 ? Ну это же полная чушь!! Все очень простотрудно(много кода, накладно для базы) реализуемый Что-то я не понял. Надо написать один раз index и поправить запрос получения главного подразделения в части добавления top 1. Это сложно? Это сложнее, чем писать "по уму" триггер, что светит автору, если проверку нельзя сделать constraint-ом? НЕт ты не понял надо обеспечить (во 2-м варианте) униакльность главного направления, а это задача не простая (не эффективная) если делать это самому. Все очень простоНасколько я понял мы говорим о многопользовательском домтупе к БД. Многопользовательское чтение? Многопользовательское редактирование состава подразделений в рамках одной работы? Имелась ввиду именно многопользовательская запись. Продолжать? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 16:18 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей, извиняюсь может я торможу, но вас не совсем понимаю по 2 варианту смотрите я предположим съимитировал ошибку пользователей id | id_customer| id_job | npp --------------------------- 1 | 1 | 1 | 1 2 | 2 | 1 | 1 3 | 5 | 1 | 1 <---- 3 ПЗ главных? предложенным запросом Код: plaintext 1. 2. Result id | id_customer| id_job | npp --------------------------- 1 | 1 | 1 | 1 А если на самом деле главное id_customer = 5 !? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 16:23 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Просто в этом случае для его определения потребуется использовать еще одно поле (гарантированно уникальный хотя бы в рамках одной работы идентификатор) Брррр... какой еще идентификатор!? В таблице связи перечня работ? напишите, пожалуйста , пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 16:27 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
vitaliy14Брррр... какой еще идентификатор!? В таблице связи перечня работ? напишите, пожалуйста , пример Пример я уже писал: order by npp,ID_Customer. ID_Customer можно заменить на ID_JOB_Customer. Если в интерфейсе и в определении главного подразделения будет одна и та же сортировка, то то подразделение, которое будет в интерфейсе первым, всегда будет главным с точки зрения логики выбора главного подразделения. vitaliy14А если на самом деле главное id_customer = 5 !? Если исходить из того, что главное подразделение в интерфейсе всегда первое, то значит для обеспечения "главности" этого подразделения потребуется указать правильные значения npp. Важно только, что ЭТИ ЖЕ значения приоритетов будут использоваться в логике, которая требует определения главного подразделения. И что сервер не сможет возвращать результаты, как ему вздумается, а будет гарантирован порядок возврата используемых подразделений и, следовательно, детерминированность главного подразделения. Все очень простоМожно устанавливать в NULL средствами БД (.. on delete set NULL) Можно. Но тогда возникает необходимость дополнительной проверки, а установлено ли для работы главное подразделение. Тогда как в моем случае достаточно указания хотя бы одного любого подразделения, самое первое будет автоматически главным. Все очень простоТ.е. ты хочешь сказать что если их будет несколько то главным выберется тот , который понравиться серверу TOP 1 ? Ну это же полная чушь!! Именно что чушь. Именно для этого я и написал про order by. Комбинация полей в секции order by будет УНИКАЛЬНА. Так что никакого произвола в здравом уме со стороны сервера не предполагается. Все очень простоИмелась ввиду именно многопользовательская запись Не понял. Где конкретно засада? Даже если в страшном сне предположить, что наряд на работу редактируется одновременно несколькими пользователями, то почему сложнее будет редактировать один список, а не тот же список + еще одно дополнительное поле? Если список не тот же (фактически, без npp), то как в Вашем случае Вы будете объяснять тупым юзерам, почему сервер выдает подразделения в произвольном порядке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 17:29 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
В моем случае нельзя вставить больше одного главного подразделения, поскольку поле одно. В твоем случае никто не мешает двум пользователям вставить две записи с одинаковым порядком сортировки по которому у тебя определяется главное подразделение. Автору - не поддавайся на провокацию! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 17:41 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простос одинаковым порядком сортировки по которому у тебя определяется главное подразделение Очевидно, Вы что-то недопоняли. То, что Вы пишете, невозможно реализовать даже десяти пользователям. Попробуйте еще раз понять, почему это так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 18:01 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоВ моем случае нельзя вставить больше одного главного подразделения, поскольку поле одно Очевидно, все 10 человек, мечтающих вставить в одно поле каждый свое главное подразделение, с большей вероятностью добьются успеха, чем 10 человек, вставляющих подразделения в отдельный список, которым можно просто заранее сказать, что 0 резервируется для главного? В общем, Вы меня здорово посмешили. И это мы еще не начали обсуждать разумность и жизненность многопользовательского одновременного редактирования перечня подразделений в наряде на работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 18:04 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
В вашем случае очень легко два пользователя одновремнно вставляют две записи с одинаковыми npp + какой-то идентификатор. База данных им этого не запретит уникального индекса в данном варианте нет. Что может помешать им сделать это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 18:12 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоВ вашем случае очень легко два пользователя одновремнно вставляют две записи с одинаковыми npp + какой-то идентификатор. База данных им этого не запретит уникального индекса в данном варианте нет. Что может помешать им сделать это? Ничего не сможет им помешать, если только они не вставят одно и то же подразделение. Но из этого не следует, что оба подразделения будут главными. Более того, этот вариант разруливается на корню даже для подобных Вам эстетов, если юзерам объяснить, что npp=0 можно использовать только для главного подразделения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 18:15 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
vitaliy14 пишет: > Разбираю чужую структуру БД. Между двумя очень объемными таблицами > существует порядка 4 связей (3 один к многим и 4-ая многие к многим), > наверное для различных запросов. Таблицы нормализованы. Ситуация > нормальная?? Да. Количество связей между таблицами может быть любым. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 22:00 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
[quot Сергей Васкецов] Ничего не сможет им помешать, если только они не вставят одно и то же подразделение. [/quo Что и требовалось доказать. А в предложенным мной вараинте БД им этого не позволит сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 14:58 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоЧто и требовалось доказать. А в предложенным мной вараинте БД им этого не позволит сделать. Я не понимаю, на каком языке Вам написать, чтобы Вы соизволили прочитать то, что я Вам пишу как минимум дважды. Если не желаете читать и думать - ради бога. Только не надо думать, что я считаю предложенный способ с npp лишенным всяческих недостатков. Я всегда знаю о недостатках того, что предлагаю. Просто я считаю способ с выделенным атрибутом главного подразделения для выбора одного из подразделений из перечня совсем неудачным, если учесть контекст обсуждения и нежелание возиться с триггерами (то есть, нежелание писать код SQL руками). И если от одного из подразделений только лишь и требуется, что считать его главным, то смысла городить какой-то дополнительный огород вообще не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 15:19 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
То что я предложил это называется модель данных , а то что вы предлагаете это вынесение модели данных в логику приложения. Чувствуете разницу? Ладно, Сергей. Если выдействительно так считаете и не хотите подумать, то жизнь Вас научит. За сим откланиваюсь. Было приятно пообщаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 15:43 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоТо что я предложил это называется модель данных , а то что вы предлагаете это вынесение модели данных в логику приложения. Чувствуете разницу? Я вообще не понимаю, к чему подобные высокопарные слова и чушь про многоюзерность, если Вы не понимаете, что согласно Вашей же модели главное подразделение должно быть обязательным, а раз в рамках модели данных этого добиться нельзя (ибо нельзя сделать ссылку на несуществующую сущность), то реализация этого (контроля, что не нафигачили подразделений без указания главного) будет ЗА рамками Вашей же модели данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 15:50 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Все очень просто Я вообще не понимаю, к чему подобные высокопарные слова и чушь про многоюзерность, если Вы не понимаете, что согласно Вашей же модели главное подразделение должно быть обязательным, а раз в рамках модели данных этого добиться нельзя (ибо нельзя сделать ссылку на несуществующую сущность), то реализация этого (контроля, что не нафигачили подразделений без указания главного) будет ЗА рамками Вашей же модели данных. Почему же обязательность главного подразделения нельзя добиться в рамках модели? Что то тут я Вас совсем не поянл. Это поле можно сделать обязательным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 15:54 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоЭто поле можно сделать обязательным. Уф. 1. Состояние работы "есть хотя бы одно подразделение в перечне подразделений, но нет главного подразделения" является ошибочным с точки зрения логики. 2. Состояние работы "главное подразделение указано, но отсутствует в перечне используемых подразделений" является ошибочным исходя предположения и сути такого перечня (см. мой комментарий сильно выше в топике). 3. Если есть желание первым указать неглавное подразделение, исходя из 1 необходимо бить юзера по рукам и запрещать это делать. 4. Если есть желание указать в перечне подразделений главное подразделение, то в момент вставки записи оно должно "скопироваться" в поле "главное подразделение", иначе будет нарушение 1. 5. Если есть желание указать главное подразделение непосредственно в предназначенном для него поле, то необходимо в момент изменения значения данного поля вставить новое значение главного подразделения в перечень всех используемых подразделений, иначе будет нарушение 2. Что делать со старым значением - вообещ непонятно, то ли удалить его из перечня подразделений, то ли оставить. 6. Удалить главное подразделение непосредственно из перечня подразделений нельзя, так как нарушится обязательность поля и (может быть) 1. Итого: а) только лишь за пункт 3 я бы уже отказался от обязательности поля в модели. б) ни 4, ни 5 нельзя реализовать без дополнительного написания кода, выходящего ЗА рамки собственно модели данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 16:08 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Все очень простоЭто поле можно сделать обязательным. Уф. 1. Состояние работы "есть хотя бы одно подразделение в перечне подразделений, но нет главного подразделения" является ошибочным с точки зрения логики. Если поле сделать обязательным то такого состояния не будет 2. Состояние работы "главное подразделение указано, но отсутствует в перечне используемых подразделений" является ошибочным исходя предположения и сути такого перечня (см. мой комментарий сильно выше в топике). Выше по топику я писал что ссылка указывается не на само подрпазделение, а на злемент из списка связанных подразделений. Поэтому данная ситуация не допустима 3. Если есть желание первым указать неглавное подразделение, исходя из 1 необходимо бить юзера по рукам и запрещать это делать. В моем варианте можно связывать с подразделениями и выбирать главный в любом порядке(не только первым) 4. Если есть желание указать в перечне подразделений главное подразделение, то в момент вставки записи оно должно "скопироваться" в поле "главное подразделение", иначе будет нарушение 1. Это особенности реализации пользовательского интерфейса 5. Если есть желание указать главное подразделение непосредственно в предназначенном для него поле, то необходимо в момент изменения значения данного поля вставить новое значение главного подразделения в перечень всех используемых подразделений, иначе будет нарушение 2. Что делать со старым значением - вообещ непонятно, то ли удалить его из перечня подразделений, то ли оставить. Это особенности реализации пользовательского интерфейса, также см. пункт 2. 6. Удалить главное подразделение непосредственно из перечня подразделений нельзя, так как нарушится обязательность поля и (может быть) 1. Обязательность не нарушится если в этой же транзакции указать новое главное. Поведение внешнего ключа при этом должно быть отложенным. Итого: а) только лишь за пункт 3 я бы уже отказался от обязательности поля в модели. б) ни 4, ни 5 нельзя реализовать без дополнительного написания кода, выходящего ЗА рамки собственно модели данных. Итого все пункты укалдываются в модель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 16:28 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
ОписАлся 6. Удалить главное подразделение непосредственно из перечня подразделений нельзя, так как нарушится обязательность поля и (может быть) 1. Обязательность не нарушится если в этой же транзакции указать новое главное. Поведение ограничения обязательности при этом должно быть отложенным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 16:35 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень просто1. Состояние работы "есть хотя бы одно подразделение в перечне подразделений, но нет главного подразделения" является ошибочным с точки зрения логики. Если поле сделать обязательным то такого состояния не будет 2. Состояние работы "главное подразделение указано, но отсутствует в перечне используемых подразделений" является ошибочным исходя предположения и сути такого перечня (см. мой комментарий сильно выше в топике). Выше по топику я писал что ссылка указывается не на само подрпазделение, а на злемент из списка связанных подразделений. Поэтому данная ситуация не допустима 3. Если есть желание первым указать неглавное подразделение, исходя из 1 необходимо бить юзера по рукам и запрещать это делать. В моем варианте можно связывать с подразделениями и выбирать главный в любом порядке(не только первым) Если главное подразделение А, а кроме него есть также Б и В, каким образом можно указать в работе подразделения Б и В, а на следующий день указать подразделение А в качестве главного? Все очень просто 4. Если есть желание указать в перечне подразделений главное подразделение, то в момент вставки записи оно должно "скопироваться" в поле "главное подразделение", иначе будет нарушение 1. Это особенности реализации пользовательского интерфейса Выходящее ЗА рамки модели. Что и требовалось доказать. Прочее тоже выходит за рамки модели. Обзывать это "особенностями реализации пользовательского интерфейса" можно, но бессмысленно, это просто словоблудство. Тем более что Вы сами пеняли мне этим выше. Итого, то, что Вы предлагаете, не может быть моделью данных как таковой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 16:38 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Все очень просто1. Состояние работы "есть хотя бы одно подразделение в перечне подразделений, но нет главного подразделения" является ошибочным с точки зрения логики. Если поле сделать обязательным то такого состояния не будет 2. Состояние работы "главное подразделение указано, но отсутствует в перечне используемых подразделений" является ошибочным исходя предположения и сути такого перечня (см. мой комментарий сильно выше в топике). Выше по топику я писал что ссылка указывается не на само подрпазделение, а на злемент из списка связанных подразделений. Поэтому данная ситуация не допустима 3. Если есть желание первым указать неглавное подразделение, исходя из 1 необходимо бить юзера по рукам и запрещать это делать. В моем варианте можно связывать с подразделениями и выбирать главный в любом порядке(не только первым) Если главное подразделение А, а кроме него есть также Б и В, каким образом можно указать в работе подразделения Б и В, а на следующий день указать подразделение А в качестве главного? Не понял вопрос. В любое время у работы должно быть одно и только одно подразделение. Это и описывается моделью. Если сегодня одно подразделение главное, а завтра другое, то просто меняешь одну ссылку на другую. Все очень просто 4. Если есть желание указать в перечне подразделений главное подразделение, то в момент вставки записи оно должно "скопироваться" в поле "главное подразделение", иначе будет нарушение 1. Это особенности реализации пользовательского интерфейса Выходящее ЗА рамки модели. Что и требовалось доказать. Прочее тоже выходит за рамки модели. Обзывать это "особенностями реализации пользовательского интерфейса" можно, но бессмысленно, это просто словоблудство. Тем более что Вы сами пеняли мне этим выше. Итого, то, что Вы предлагаете, не может быть моделью данных как таковой. Это не словоблудство, а именно особенности реализации ПИ. Если ты утверждаешь что модель не соотвествует предметной области, то приведи хоть один пример когда модель допускает введение нецелостных(неверных) данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 16:48 |
|
||
|
Несколько связей между двумя таблицами
|
|||
|---|---|---|---|
|
#18+
Все очень простоЕсли главное подразделение А, а кроме него есть также Б и В, каким образом можно указать в работе подразделения Б и В, а на следующий день указать подразделение А в качестве главного? Не понял вопрос. В любое время у работы должно быть одно и только одно подразделение. Это и описывается моделью. Если сегодня одно подразделение главное, а завтра другое, то просто меняешь одну ссылку на другую. Как можно было не понять столько четко сформулированный вопрос? 1. Согласно задаче автора, у работы может быть сколь угодно много подразделений (фактически, больше нуля), но обязательно есть одно главное подразделение. 2. Подразделения Б и В не являются главными. 3. Главным является подразделение А. 4. Есть желание главное подразделение указать ПОСЛЕДНИМ среди всех подразделений. До этого никаких главных подразделений нет, ни Б ни В им быть не может. Это не какая-то фантастическая ситуация. Например, главным подразделением является контролирующее подразделение, какое именно оно будет - заранее неизвестно (ОТК). То есть это вполне житейская ситуация, не выходящая за рамки задачи автора. Все очень простоЕсли ты утверждаешь что модель не соотвествует предметной области, то приведи хоть один пример когда модель допускает введение нецелостных(неверных) данных Вы забыли добавить условие ", чтобы я его понял". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 16:55 |
|
||
|
|

start [/forum/search_topic.php?author=Script23&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
86ms |
get tp. blocked users: |
1ms |
| others: | 697ms |
| total: | 1004ms |

| 0 / 0 |
