powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Несколько связей между двумя таблицами
25 сообщений из 96, страница 2 из 4
Несколько связей между двумя таблицами
    #35460807
О какой избыточности идет речь?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460819
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоА если хранить ссылку на элемнт перечня работ ? Проверять ничего не надо это БД проверяет.
И при удалении "главного" подразделения из перечня работ...?

Все очень простото 2-й вообще ничего не будет гарантировать, т.е. будем иметь несоклько главных подразделений
Лучше сначала разобраться, а потом критиковать. Подразделение главное всегда одно.

Все очень простотрудно(много кода, накладно для базы) реализуемый
Что-то я не понял. Надо написать один раз index и поправить запрос получения главного подразделения в части добавления top 1. Это сложно? Это сложнее, чем писать "по уму" триггер, что светит автору, если проверку нельзя сделать constraint-ом?

Все очень простоНасколько я понял мы говорим о многопользовательском домтупе к БД.
Многопользовательское чтение?
Многопользовательское редактирование состава подразделений в рамках одной работы?
Продолжать?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460831
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitaliy142 вариант - проблем с редактированием нет, но прийдется на клиенте проверять,чтобы пользователи два ПЗ не сделали главными
Главное подразделение может быть всегда только одно даже в том случае, если два значения npp в перечне подразделений совпадают. Просто в этом случае для его определения потребуется использовать еще одно поле (гарантированно уникальный хотя бы в рамках одной работы идентификатор). Например, select top ... order by ... Идея тривиальная же. Важно только, чтобы можно было всегда сказать, какое главное.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460836
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов Все очень простоА если хранить ссылку на элемнт перечня работ ? Проверять ничего не надо это БД проверяет.
И при удалении "главного" подразделения из перечня работ...?
А также является ли ссылка (главное подразделение) на "дочерний" перечень с подразделениями обязательным полем?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460898
Сергей Васкецов Все очень простоА если хранить ссылку на элемнт перечня работ ? Проверять ничего не надо это БД проверяет.
И при удалении "главного" подразделения из перечня работ...?

Можно устанавливать в NULL средствами БД (.. on delete set NULL)

Все очень простото 2-й вообще ничего не будет гарантировать, т.е. будем иметь несоклько главных подразделений
Лучше сначала разобраться, а потом критиковать. Подразделение главное всегда одно.

Т.е. ты хочешь сказать что если их будет несколько то главным выберется тот , который понравиться серверу TOP 1 ? Ну это же полная чушь!!

Все очень простотрудно(много кода, накладно для базы) реализуемый
Что-то я не понял. Надо написать один раз index и поправить запрос получения главного подразделения в части добавления top 1. Это сложно? Это сложнее, чем писать "по уму" триггер, что светит автору, если проверку нельзя сделать constraint-ом?

НЕт ты не понял надо обеспечить (во 2-м варианте) униакльность главного направления, а это задача не простая (не эффективная) если делать это самому.

Все очень простоНасколько я понял мы говорим о многопользовательском домтупе к БД.
Многопользовательское чтение?
Многопользовательское редактирование состава подразделений в рамках одной работы?

Имелась ввиду именно многопользовательская запись.
Продолжать?

Да.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460910
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей, извиняюсь может я торможу, но вас не совсем понимаю

по 2 варианту
смотрите я предположим съимитировал ошибку пользователей
id | id_customer| id_job | npp
---------------------------
1 | 1 | 1 | 1
2 | 2 | 1 | 1
3 | 5 | 1 | 1 <---- 3 ПЗ главных?

предложенным запросом

Код: plaintext
1.
2.
SELECT TOP  1  * 
FROM TABLE1
ORDER BY npp, id_customer

Result

id | id_customer| id_job | npp
---------------------------
1 | 1 | 1 | 1

А если на самом деле главное id_customer = 5 !?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460923
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов Просто в этом случае для его определения потребуется использовать еще одно поле (гарантированно уникальный хотя бы в рамках одной работы идентификатор)


Брррр... какой еще идентификатор!? В таблице связи перечня работ? напишите, пожалуйста , пример
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35461121
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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), то как в Вашем случае Вы будете объяснять тупым юзерам, почему сервер выдает подразделения в произвольном порядке?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35461164
В моем случае нельзя вставить больше одного главного подразделения, поскольку поле одно.
В твоем случае никто не мешает двум пользователям вставить две записи с одинаковым порядком сортировки по которому у тебя определяется главное подразделение.

Автору - не поддавайся на провокацию!
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35461238
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простос одинаковым порядком сортировки по которому у тебя определяется главное подразделение
Очевидно, Вы что-то недопоняли. То, что Вы пишете, невозможно реализовать даже десяти пользователям. Попробуйте еще раз понять, почему это так.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35461255
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоВ моем случае нельзя вставить больше одного главного подразделения, поскольку поле одно
Очевидно, все 10 человек, мечтающих вставить в одно поле каждый свое главное подразделение, с большей вероятностью добьются успеха, чем 10 человек, вставляющих подразделения в отдельный список, которым можно просто заранее сказать, что 0 резервируется для главного? В общем, Вы меня здорово посмешили. И это мы еще не начали обсуждать разумность и жизненность многопользовательского одновременного редактирования перечня подразделений в наряде на работу.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35461289
В вашем случае очень легко два пользователя одновремнно вставляют две записи с одинаковыми npp + какой-то идентификатор. База данных им этого не запретит уникального индекса в данном варианте нет. Что может помешать им сделать это?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35461296
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоВ вашем случае очень легко два пользователя одновремнно вставляют две записи с одинаковыми npp + какой-то идентификатор. База данных им этого не запретит уникального индекса в данном варианте нет. Что может помешать им сделать это?
Ничего не сможет им помешать, если только они не вставят одно и то же подразделение. Но из этого не следует, что оба подразделения будут главными. Более того, этот вариант разруливается на корню даже для подобных Вам эстетов, если юзерам объяснить, что npp=0 можно использовать только для главного подразделения.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35461581
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitaliy14 пишет:
> Разбираю чужую структуру БД. Между двумя очень объемными таблицами
> существует порядка 4 связей (3 один к многим и 4-ая многие к многим),
> наверное для различных запросов. Таблицы нормализованы. Ситуация
> нормальная??

Да. Количество связей между таблицами может быть любым.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463375
[quot Сергей Васкецов]
Ничего не сможет им помешать, если только они не вставят одно и то же подразделение. [/quo

Что и требовалось доказать. А в предложенным мной вараинте БД им этого не позволит сделать.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463459
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоЧто и требовалось доказать. А в предложенным мной вараинте БД им этого не позволит сделать.
Я не понимаю, на каком языке Вам написать, чтобы Вы соизволили прочитать то, что я Вам пишу как минимум дважды. Если не желаете читать и думать - ради бога. Только не надо думать, что я считаю предложенный способ с npp лишенным всяческих недостатков. Я всегда знаю о недостатках того, что предлагаю. Просто я считаю способ с выделенным атрибутом главного подразделения для выбора одного из подразделений из перечня совсем неудачным, если учесть контекст обсуждения и нежелание возиться с триггерами (то есть, нежелание писать код SQL руками). И если от одного из подразделений только лишь и требуется, что считать его главным, то смысла городить какой-то дополнительный огород вообще не вижу.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463523
То что я предложил это называется модель данных , а то что вы предлагаете это вынесение модели данных в логику приложения. Чувствуете разницу?
Ладно, Сергей. Если выдействительно так считаете и не хотите подумать, то жизнь Вас научит.
За сим откланиваюсь. Было приятно пообщаться
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463545
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоТо что я предложил это называется модель данных , а то что вы предлагаете это вынесение модели данных в логику приложения. Чувствуете разницу?
Я вообще не понимаю, к чему подобные высокопарные слова и чушь про многоюзерность, если Вы не понимаете, что согласно Вашей же модели главное подразделение должно быть обязательным, а раз в рамках модели данных этого добиться нельзя (ибо нельзя сделать ссылку на несуществующую сущность), то реализация этого (контроля, что не нафигачили подразделений без указания главного) будет ЗА рамками Вашей же модели данных.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463561
Сергей Васкецов Все очень просто
Я вообще не понимаю, к чему подобные высокопарные слова и чушь про многоюзерность, если Вы не понимаете, что согласно Вашей же модели главное подразделение должно быть обязательным, а раз в рамках модели данных этого добиться нельзя (ибо нельзя сделать ссылку на несуществующую сущность), то реализация этого (контроля, что не нафигачили подразделений без указания главного) будет ЗА рамками Вашей же модели данных.

Почему же обязательность главного подразделения нельзя добиться в рамках модели? Что то тут я Вас совсем не поянл. Это поле можно сделать обязательным.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463589
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоЭто поле можно сделать обязательным.
Уф.
1. Состояние работы "есть хотя бы одно подразделение в перечне подразделений, но нет главного подразделения" является ошибочным с точки зрения логики.
2. Состояние работы "главное подразделение указано, но отсутствует в перечне используемых подразделений" является ошибочным исходя предположения и сути такого перечня (см. мой комментарий сильно выше в топике).
3. Если есть желание первым указать неглавное подразделение, исходя из 1 необходимо бить юзера по рукам и запрещать это делать.
4. Если есть желание указать в перечне подразделений главное подразделение, то в момент вставки записи оно должно "скопироваться" в поле "главное подразделение", иначе будет нарушение 1.
5. Если есть желание указать главное подразделение непосредственно в предназначенном для него поле, то необходимо в момент изменения значения данного поля вставить новое значение главного подразделения в перечень всех используемых подразделений, иначе будет нарушение 2. Что делать со старым значением - вообещ непонятно, то ли удалить его из перечня подразделений, то ли оставить.
6. Удалить главное подразделение непосредственно из перечня подразделений нельзя, так как нарушится обязательность поля и (может быть) 1.

Итого:
а) только лишь за пункт 3 я бы уже отказался от обязательности поля в модели.
б) ни 4, ни 5 нельзя реализовать без дополнительного написания кода, выходящего ЗА рамки собственно модели данных.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463672
Сергей Васкецов Все очень простоЭто поле можно сделать обязательным.
Уф.
1. Состояние работы "есть хотя бы одно подразделение в перечне подразделений, но нет главного подразделения" является ошибочным с точки зрения логики.
Если поле сделать обязательным то такого состояния не будет
2. Состояние работы "главное подразделение указано, но отсутствует в перечне используемых подразделений" является ошибочным исходя предположения и сути такого перечня (см. мой комментарий сильно выше в топике).
Выше по топику я писал что ссылка указывается не на само подрпазделение, а на злемент из списка связанных подразделений. Поэтому данная ситуация не допустима
3. Если есть желание первым указать неглавное подразделение, исходя из 1 необходимо бить юзера по рукам и запрещать это делать.
В моем варианте можно связывать с подразделениями и выбирать главный в любом порядке(не только первым)
4. Если есть желание указать в перечне подразделений главное подразделение, то в момент вставки записи оно должно "скопироваться" в поле "главное подразделение", иначе будет нарушение 1.
Это особенности реализации пользовательского интерфейса
5. Если есть желание указать главное подразделение непосредственно в предназначенном для него поле, то необходимо в момент изменения значения данного поля вставить новое значение главного подразделения в перечень всех используемых подразделений, иначе будет нарушение 2. Что делать со старым значением - вообещ непонятно, то ли удалить его из перечня подразделений, то ли оставить.
Это особенности реализации пользовательского интерфейса, также см. пункт 2.
6. Удалить главное подразделение непосредственно из перечня подразделений нельзя, так как нарушится обязательность поля и (может быть) 1.
Обязательность не нарушится если в этой же транзакции указать новое главное. Поведение внешнего ключа при этом должно быть отложенным.

Итого:
а) только лишь за пункт 3 я бы уже отказался от обязательности поля в модели.
б) ни 4, ни 5 нельзя реализовать без дополнительного написания кода, выходящего ЗА рамки собственно модели данных.

Итого все пункты укалдываются в модель
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463702
ОписАлся

6. Удалить главное подразделение непосредственно из перечня подразделений нельзя, так как нарушится обязательность поля и (может быть) 1.
Обязательность не нарушится если в этой же транзакции указать новое главное. Поведение ограничения обязательности при этом должно быть отложенным.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463720
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень просто1. Состояние работы "есть хотя бы одно подразделение в перечне подразделений, но нет главного подразделения" является ошибочным с точки зрения логики.
Если поле сделать обязательным то такого состояния не будет

2. Состояние работы "главное подразделение указано, но отсутствует в перечне используемых подразделений" является ошибочным исходя предположения и сути такого перечня (см. мой комментарий сильно выше в топике).
Выше по топику я писал что ссылка указывается не на само подрпазделение, а на злемент из списка связанных подразделений. Поэтому данная ситуация не допустима

3. Если есть желание первым указать неглавное подразделение, исходя из 1 необходимо бить юзера по рукам и запрещать это делать.
В моем варианте можно связывать с подразделениями и выбирать главный в любом порядке(не только первым)


Если главное подразделение А, а кроме него есть также Б и В, каким образом можно указать в работе подразделения Б и В, а на следующий день указать подразделение А в качестве главного?

Все очень просто
4. Если есть желание указать в перечне подразделений главное подразделение, то в момент вставки записи оно должно "скопироваться" в поле "главное подразделение", иначе будет нарушение 1.
Это особенности реализации пользовательского интерфейса

Выходящее ЗА рамки модели. Что и требовалось доказать. Прочее тоже выходит за рамки модели. Обзывать это "особенностями реализации пользовательского интерфейса" можно, но бессмысленно, это просто словоблудство. Тем более что Вы сами пеняли мне этим выше. Итого, то, что Вы предлагаете, не может быть моделью данных как таковой.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463747
Сергей Васкецов Все очень просто1. Состояние работы "есть хотя бы одно подразделение в перечне подразделений, но нет главного подразделения" является ошибочным с точки зрения логики.
Если поле сделать обязательным то такого состояния не будет

2. Состояние работы "главное подразделение указано, но отсутствует в перечне используемых подразделений" является ошибочным исходя предположения и сути такого перечня (см. мой комментарий сильно выше в топике).
Выше по топику я писал что ссылка указывается не на само подрпазделение, а на злемент из списка связанных подразделений. Поэтому данная ситуация не допустима

3. Если есть желание первым указать неглавное подразделение, исходя из 1 необходимо бить юзера по рукам и запрещать это делать.
В моем варианте можно связывать с подразделениями и выбирать главный в любом порядке(не только первым)


Если главное подразделение А, а кроме него есть также Б и В, каким образом можно указать в работе подразделения Б и В, а на следующий день указать подразделение А в качестве главного?

Не понял вопрос. В любое время у работы должно быть одно и только одно подразделение. Это и описывается моделью. Если сегодня одно подразделение главное, а завтра другое, то просто меняешь одну ссылку на другую.
Все очень просто
4. Если есть желание указать в перечне подразделений главное подразделение, то в момент вставки записи оно должно "скопироваться" в поле "главное подразделение", иначе будет нарушение 1.
Это особенности реализации пользовательского интерфейса

Выходящее ЗА рамки модели. Что и требовалось доказать. Прочее тоже выходит за рамки модели. Обзывать это "особенностями реализации пользовательского интерфейса" можно, но бессмысленно, это просто словоблудство. Тем более что Вы сами пеняли мне этим выше. Итого, то, что Вы предлагаете, не может быть моделью данных как таковой.
Это не словоблудство, а именно особенности реализации ПИ. Если ты утверждаешь что модель не соотвествует предметной области, то приведи хоть один пример когда модель допускает введение нецелостных(неверных) данных
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35463770
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоЕсли главное подразделение А, а кроме него есть также Б и В, каким образом можно указать в работе подразделения Б и В, а на следующий день указать подразделение А в качестве главного?
Не понял вопрос. В любое время у работы должно быть одно и только одно подразделение. Это и описывается моделью. Если сегодня одно подразделение главное, а завтра другое, то просто меняешь одну ссылку на другую.
Как можно было не понять столько четко сформулированный вопрос?
1. Согласно задаче автора, у работы может быть сколь угодно много подразделений (фактически, больше нуля), но обязательно есть одно главное подразделение.
2. Подразделения Б и В не являются главными.
3. Главным является подразделение А.
4. Есть желание главное подразделение указать ПОСЛЕДНИМ среди всех подразделений. До этого никаких главных подразделений нет, ни Б ни В им быть не может. Это не какая-то фантастическая ситуация. Например, главным подразделением является контролирующее подразделение, какое именно оно будет - заранее неизвестно (ОТК). То есть это вполне житейская ситуация, не выходящая за рамки задачи автора.

Все очень простоЕсли ты утверждаешь что модель не соотвествует предметной области, то приведи хоть один пример когда модель допускает введение нецелостных(неверных) данных
Вы забыли добавить условие ", чтобы я его понял".
...
Рейтинг: 0 / 0
25 сообщений из 96, страница 2 из 4
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Несколько связей между двумя таблицами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]