powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Несколько связей между двумя таблицами
96 сообщений из 96, показаны все 4 страниц
Несколько связей между двумя таблицами
    #35459812
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разбираю чужую структуру БД. Между двумя очень объемными таблицами существует порядка 4 связей (3 один к многим и 4-ая многие к многим), наверное для различных запросов. Таблицы нормализованы. Ситуация нормальная??

зы в первый раз сталкиваюсь с такой объемной и сложной БД.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35459856
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitaliy14Разбираю чужую структуру БД. Между двумя очень объемными таблицами существует порядка 4 связей (3 один к многим и 4-ая многие к многим), наверное для различных запросов. Таблицы нормализованы. Ситуация нормальная??

зы в первый раз сталкиваюсь с такой объемной и сложной БД.
Нормально, бывает и хуже. Какой SQL-сервер?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35459895
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_L vitaliy14Разбираю чужую структуру БД. Между двумя очень объемными таблицами существует порядка 4 связей (3 один к многим и 4-ая многие к многим), наверное для различных запросов. Таблицы нормализованы. Ситуация нормальная??

зы в первый раз сталкиваюсь с такой объемной и сложной БД.
Нормально, бывает и хуже. Какой SQL-сервер?
MSSQL 2000
по логике тоже, так кажется. Не сложные запросы зато получаются. Прсто громоздко на схеме выглядит!? )
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35459982
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitaliy14 Senya_L vitaliy14Разбираю чужую структуру БД. Между двумя очень объемными таблицами существует порядка 4 связей (3 один к многим и 4-ая многие к многим), наверное для различных запросов. Таблицы нормализованы. Ситуация нормальная??

зы в первый раз сталкиваюсь с такой объемной и сложной БД.
Нормально, бывает и хуже. Какой SQL-сервер?
MSSQL 2000
по логике тоже, так кажется. Не сложные запросы зато получаются. Прсто громоздко на схеме выглядит!? ) Схемы нужны для лучшего понимания структуры БД, а не для того, чтобы они красиво выглядели. Если схема не очень наглядно, к ней прикладывается пояснение.
Не заморачивайся этими CASE-средствами проектирования.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460000
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitaliy14по логике тоже, так кажется. Не сложные запросы зато получаются. Прсто громоздко на схеме выглядит!? )Запросы не обязательно зависят от связей. которые отображены на схеме. Если в запросе джоин не будет указан явно, никакая связь из схемы не поможет.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460062
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще один вопрос - Есть таблица "работа" и "подразделение заказчика". У каждой работы может быть несколько подразделений, но главное только одно ! (для этого есть поле IS_MAIN (yes/no)). Триггер нужно писать на update и insert? (Constraint не напишешь)
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460080
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitaliy14но главное только одно ! (для этого есть поле IS_MAIN (yes/no))
Видимо, речь про дополнительную табличку и связь M:N? Так вот, в случае такой таблички есть методы попроще, без IS_MAIN-ов.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460147
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов vitaliy14но главное только одно ! (для этого есть поле IS_MAIN (yes/no))
Видимо, речь про дополнительную табличку и связь M:N? Так вот, в случае такой таблички есть методы попроще, без IS_MAIN-ов.
Да 3-я таблица "многие к многим". Какие методы? Пример бы мне?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460241
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitaliy14Пример бы мне?
Делаете поле типа npp (номер по порядку). При выводе на печать сортируете по нему (все равно определенность нужна, а таким способом легко вручную управлять порядком записей). Главное подразделение - то, которое первое (с минимальным npp). Никаких ненужных триггеров. Если нужна гарантированная сортировка даже при совпадении значений npp, добавляете в перечень полей сортировки идентификатор. Надеюсь, уникальный индекс уже есть в этой таблице по паре полей "работа" и "подразделение"?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460301
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет еще ничего таблицы пустые! Т.е. по пунктам

Таблица Работа-ПЗ (подразделение заказчика)
----------------------------------------------
ID_JOB_Customer
ID_JOB
ID_Customer
NPP

1. Нужно сделать unique индекс по полям ID_JOB - ID_Customer - NPP?
2. И считать NPP c 1 для главного?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460336
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitaliy14Нужно сделать unique индекс по полям ID_JOB - ID_Customer - NPP?
Не-а, только по паре полей ID_JOB и ID_Customer.

vitaliy14И считать NPP c 1 для главного?
Да можно и с нуля. Не принципиально.

Сортировка может быть типа
order by sign(npp) desc,npp,ID_Customer
или
order by npp,ID_Customer.
В первом случае все новые строки с нулевым значением npp будут "падать в конец".
ID_Customer можно заменить на ID_JOB_Customer.
Записей таких по сути немного будет, так что что бы Вы ни выдумали (в части сортировки), для сервера это будет не напряжно.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460408
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не работает или я вас не понял!

получается

id | id_customer| id_job | npp
---------------------------
1 | 1 | 1 | 1
2 | 2 | 1 | 1 Два ПЗ главных?


Мне же нужно - для каждой работы из нескольких подразделений ее выполнявших одно было главным! Индекс по id_job и npp нужно строить?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460414
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
id | id_customer| id_job | npp
---------------------------
1 | 1 | 1 | 1 <-----|
2 | 2 | 1 | 1 <-------- Два ПЗ главных?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460416
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitaliy14Два ПЗ главных?
Главное - первое - всегда одно.
Впрочем, можете сделать дополнительный уникальный индекс по ID_JOB и npp, если уж так хочется.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460457
Нужно в таблице Работ хранить ссылка на главное подразделение.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460458
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов vitaliy14Два ПЗ главных?
Главное - первое - всегда одно.
Впрочем, можете сделать дополнительный уникальный индекс по ID_JOB и npp, если уж так хочется.
Подождите запутался

unique индекс только по полям ID_JOB - NPP - чтобы не было двух главных подразделений н а одну работу?

и unique индекс по полям ID_JOB - ID_Customer, чтобы не было абсурда?

Спасибо Вам большое :)

зы это не единственная таблица с такими условиями, подобное нужно еще в нескольких местах.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460473
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоНужно в таблице Работ хранить ссылка на главное подразделение.
В смысле если не NULL, то главное!
Помойму Сергей Васкецов предложил достаточно элегантное решение
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460497
Нет Работа должна сылать на главное подразделение. В таблице справочника Работ должно быть поле в котором хранится ссылка на таблицу справчоника подразделений.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460505
Т.е. по сути еще одна связь "Главное подразделение"
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460511
А хранить это в как признак в другой связи ИМХО неверно
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460555
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitaliy14unique индекс только по полям ID_JOB - NPP - чтобы не было двух главных подразделений н а одну работу?
1. Можно сделать уникальный индекс. Тогда при редактировании необходимо будет разруливать ситуацию (на уровне интерфейса, видимо), когда потребуется поменять местами два подразделения.
2. Можно не делать уникальный индекс, а обойтись сортировкой. Для получения главного подразделения использовать select top 1 ...., тогда ошибки нарушения индекса не будет (так как не будет индекса).
3. Можно сделать ссылку на главное подразделение как отдельный атрибут работы. В таком случае потребуется в зависимости от постановки задачи либо проверять, что ссылки на главное подразделение нет в перечне подразделений, либо наоборот, требовать в перечне подразделений ссылку на главное. То есть, в зависимости от логики, список подразделений будет либо списком всех используемых подразделений, либо списком всех вспомогательных подразделений. С моей точки зрения, решение идиотское как по постановке, так и по трудозатратам.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460562
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоНет Работа должна сылать на главное подразделение
Прокомментировал сообщением выше.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460598
А если хранить ссылку на элемнт перечня работ ? Проверять ничего не надо это БД проверяет.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460644
Сергей Васкецов vitaliy14unique индекс только по полям ID_JOB - NPP - чтобы не было двух главных подразделений н а одну работу?
1. Можно сделать уникальный индекс. Тогда при редактировании необходимо будет разруливать ситуацию (на уровне интерфейса, видимо), когда потребуется поменять местами два подразделения.
2. Можно не делать уникальный индекс, а обойтись сортировкой. Для получения главного подразделения использовать select top 1 ...., тогда ошибки нарушения индекса не будет (так как не будет индекса).

Предложенный тобой вариант технически неграмотный и трудно(много кода, накладно для базы) реализуемый. Насколько я понял мы говорим о многопользовательском домтупе к БД.
Если 1-й твой вариант еще хоть как-то будет что-то гарантировать, то 2-й вообще ничего не будет гарантировать, т.е. будем иметь несоклько главных подразделений. ИМХО решение попахивает ламеризмом.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35460768
vitaliy14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Можно не делать уникальный индекс, а обойтись сортировкой. Для получения главного подразделения использовать select top 1 ...., тогда ошибки нарушения индекса не будет (так как не будет индекса).
Действительно, 1 вариант хороший, но гемморой с редактированием.
2 вариант - проблем с редактированием нет, но прийдется на клиенте проверять,чтобы пользователи два ПЗ не сделали главными. Тогда теряется вообще какой-то смысл в ограничениях!

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

Если с точки зрения предметной области допустимо отсутствие главного подразделения (заранне неизвестно, но станет известно потом), то тогда поле будет необязательным

Вы забыли добавить условие ", чтобы я его понял".

Юмор твой я не понял :(
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35464075
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоЕсли с точки зрения предметной области допустимо отсутствие главного подразделения (заранне неизвестно, но станет известно потом), то тогда поле будет необязательным
Потребуется дополнительная проверка на стадии, когда для работы необходимо будет точно знать главное подразделение. Видимо, она будет реализована в виде сообщения об ошибке юзеру "выберите главное подразделение из перечня подразделений", когда тот начнет печатать, например, наряд на работу. Напоминаю про негативное отношение автора вопроса к ручному коду SQL, а также про старика Оккама. Сравните с простейшим решением "npp=0 только для главного подразделения".
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35464143
Ну так его npp=0 тоже ведь нужно устанваливатью и заранне тоже может быть неизвестно какое главное. Как в этом случае использование npp=0 может облегчить жизнь? Не говоря уже о том что пользователь по не знанию или намеренно может ввести несколько главных из-за чего, например, перестанет рабоать часть функционала. Что тогда?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35464804
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоНу так его npp=0 тоже ведь нужно устанваливатью и заранне тоже может быть неизвестно какое главное
Это не принципиально, важно только наличие детерминированной сортировки и принципиальной возможности установить/добавить любое подразделение главным в любой момент, если только заранее сильно не обгадиться. Под "обгадиться" я здесь понимаю, например, установить неглавное подразделение со значением npp=maxint и договоренностью, что главным считается первое подразделение в соответствии с сортировкой order by npp desc,id (это еще и намек, что логику сортировки можно немного "подвигать", пока решение не принято), так что главное со значением maxint+1 уже не удастся вставить. В этом смысле использовать в качестве главного подраздедления запись с максимальным значением npp может оказаться удобнее, даже можно в известной степени npp формировать полуавтоматически начиная с маленьких целых значений.

Все очень простоКак в этом случае использование npp=0 может облегчить жизнь? Не говоря уже о том что пользователь по не знанию или намеренно может ввести несколько главных из-за чего, например, перестанет рабоать часть функционала. Что тогда?
Из "npp=0 только для главного подразделения" не следует, что "если у подразделения npp=0, то оно главное". Понятно, что тонкости начинаются в тот момент, когда у двух подразделений с претензиями на главенство одинаковое значение npp (и в ощем случае не обязательно равное нулю). А облегчить жизнь это может существенно. Смысл в том, что подчас формализовать что-то сложнее, чем только лишь объяснить это юзеру. Пользователи обычно знают, какое подразделение главное, а какое - нет. И если человек внес неглавное подразделение с npp=0, или два разных человека внесли (каждый свое, как кто думал) главные подразделения с npp=0, главным будет только одно, зато видно будет, кто как и почему обгадился. А то, что перестанет работать часть функционала, как-то не верится, если только заранее не делать слишком сильных допущений. Также как и в Вашем случае, в том месте, где определяется главное подразделение, логика определения главного подразделения должна быть единой. Пусть это отдельное поле, пусть это функция - пока что не принципиально. Важно только, чтобы алгоритм определения главного подразделения возвращал детерминированный результат, не зависящий от настроения админа, фазы луны и тонкостей поднятия дампа. Если это будет реализовано - ничего никогда не отъедет.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465099
Я считаю дурным тоном зашивать ассосиации между сущностями (связи) в логику приложения. Очень сложно будет поддерживать такую систему. ИМХО предметная область по возможности должна по максимуму отражаться в модели данных.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465326
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоЯ считаю дурным тоном зашивать ассосиации между сущностями (связи) в логику приложения. Очень сложно будет поддерживать такую систему. ИМХО предметная область по возможности должна по максимуму отражаться в модели данных.
В данном сообщении есть внутреннее противоречие. Оно заключается в том, что модель данных всегда зашита в логику приложения. Поэтому деваться некуда.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465406
А вот здесь я тебя не понял. Каким это образом в моем варианте связь "Главное подразделение" зашито в логику приложения? Это же декларативный констрейнт на уровне базы данных и он ни каким образом не зависит ни от какой логики никакого приложения. Это же модель данных.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465415
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов... модель данных всегда зашита в логику приложения...Обычно считается, что МД отделена от приложения. Поясните, пожалуйста

Честно говоря, я тоже не до конца понял Ваше решение. Имеем две записи с npp=0. По Вашему - вполне законно.
1. id_cust = 1
2. id_cust = 2
Какое из них главное - то, которое вернет сервер по top 1?.. с order by по какому аттрибуту?..
Ну, допустим, он вернет c id_cust=1, но тут юзер посчитал, что это неправильно, какие ему сделать движения, чтобы главным стал id_cust=2?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465420
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоА вот здесь я тебя не понял. Каким это образом в моем варианте связь "Главное подразделение" зашито в логику приложения?
Очевидно, в приложении есть ОТДЕЛЬНОЕ ВЫДЕЛЕННОЕ ПОЛЕ для отображения и редактирования ссылки на главное подразделение. Это поле специально сделано для главного подразделения, и если поля в интерфейсе нет, а в модели оно есть, никому от этого легче не станет.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465435
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 по возрастанию.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465494
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовПо-вашему, любое приложение может работать на любой МД?
По моему с МД (а лучше сказать просто РБД) может работать несколько приложений именно потому что данные отделены от приложений и это считается большим достижением в инфотехнологиях. Для Вас это новость?

Сергей ВаскецовОчевидно, раз на значение id_cust повлиять нельзя, то надо изменять npp. Например, уменьшить у главного или увеличить у неглавного, если сортировка по npp по возрастанию.
Так решения нет?.. Вы на ходу придумываете?..

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

Sgt.Pepper Сергей ВаскецовОчевидно, раз на значение id_cust повлиять нельзя, то надо изменять npp. Например, уменьшить у главного или увеличить у неглавного, если сортировка по npp по возрастанию.
Так решения нет?.. Вы на ходу придумываете?..
Вообще-то в моем предложении ИЛИ разделяет 2 возможных решения, выбирайте любое, какое нравится. Результат - нужное подразделение станет главным - в обоих случаях будет достижим. И придумываю я не находу, а уже как 2-ю страницу пытаюсь это донести для неумеющих пользоваться глазами и мозгом.

Sgt.PepperНу вот Вы говорите в приложении будет поле для главного подразделения. Какие действия с вышеуказанной таблицей должны произойти при его (поля) изменении?..
по шагам, для тупых, пожалуйста... :)
Я как раз не говорил, что надо делать отдельно поле для главного подразделения, если это только для галочки, что оно "главное". Но если уж хотите, то при его изменении, видимо, должно выполняться нечто типа update rabota set id_main_cust=N where id_rabota=M. За один шаг.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465661
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовПо-вашему, данные и модель данных - это одно и то же?
Играть словами и флеймить не будем :)
Сергей ВаскецовЯ как раз не говорил, что надо делать отдельно поле для главного подразделения, если это только для галочки, что оно "главное".
А здесь?
Сергей ВаскецовНо если уж хотите, то при его изменении, видимо, должно выполняться нечто типа 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?..
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465670
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperКак все запуталось!
Отмечу, после Вашей неверной предпосылки "Ну вот Вы говорите в приложении будет поле для главного подразделения". В случае процитированной Вами таблицы с NPP никакого отдельного поля "Главное подразделение" нет ввиду его ненужности.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465676
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.Pepper Сергей ВаскецовЯ как раз не говорил, что надо делать отдельно поле для главного подразделения, если это только для галочки, что оно "главное".
А здесь?
Это было развитие "конкурирующей" идеи. За нее пусть отвечает ее автор.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465701
Я настаиваю что для связи "Главное подразделение" необходимо отдельное поле(внешний ключ). И нужно чтобы пользователь ЯВНО указывал главное подразделение в соотвествии с моделью данных, а не выдумывать какой-то порядок и по нему определять главное подразделение. Это не логично, не очевидно и никак не отражается в модели данных а хранится только в логике приложения.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465708
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов Sgt.PepperКак все запуталось!
Отмечу, после Вашей неверной предпосылки "Ну вот Вы говорите в приложении будет поле для главного подразделения". В случае процитированной Вами таблицы с NPP никакого отдельного поля "Главное подразделение" нет ввиду его ненужности.
Просто прелесть!.. Так значит "update rabota set id_main_cust=N" вернет ошибку?..

ОК, но что-то есть, что помогает юзеру сказать "А вот это будет главное"?..

По-моему у Вас вышло бы быстрее если бы Вы вместо последних двух страниц описали последовательность действий :)
ну типа:
1. Создаем таблу с полями... бла-бла-бла
2. При добавлении юзером работы... бла-бла-бла
3. При смене главного подразделения... бла-бла-бла
4. ..............
5. ..............
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465718
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоникак не отражается в модели данных а хранится только в логике приложения.
Пожалуй, я пасану.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465720
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоЯ настаиваю что для связи "Главное подразделение" необходимо отдельное поле(внешний ключ). И нужно чтобы пользователь ЯВНО указывал главное подразделение в соотвествии с моделью данных, а не выдумывать какой-то порядок и по нему определять главное подразделение. Это не логично, не очевидно и никак не отражается в модели данных а хранится только в логике приложения.
согласен, пока что идея Сергея выглядит чем-то весьма экзотическим...
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465735
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperПросто прелесть!.. Так значит "update rabota set id_main_cust=N" вернет ошибку?..
Смех без причины?

Sgt.PepperОК, но что-то есть, что помогает юзеру сказать "А вот это будет главное"?..
Да. В перечне подразделений оно будет первым. Или последним. Как захотите. Если сделать функцию, возвращающую по работе ее главное подразделение, можно и отдельно его отображать.

Sgt.PepperПо-моему у Вас вышло бы быстрее если бы Вы вместо последних двух страниц описали последовательность действий :)
По-моему, кто хотел, уже все давно понял. И таблица, и что делать - все давно написано.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465769
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовСмех без причины?
Не, ну правда, Сергей, почему без причины. Вы написали update, который использует несуществующие поля типа id_main_cust. Или оно нужно? Ответьте определенно и тогда разговор можно продолжать в серьезном ключе, без смеха...

Сергей ВаскецовПо-моему, кто хотел, уже все давно понял. И таблица, и что делать - все давно написано.
Это вообще в стиле ЧАЛа, хоть (с) ставь :)
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465795
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.Pepper Сергей ВаскецовСмех без причины?
Не, ну правда, Сергей, почему без причины. Вы написали update, который использует несуществующие поля типа id_main_cust. Или оно нужно? Ответьте определенно и тогда разговор можно продолжать в серьезном ключе, без смеха...
Вы считаете, что каждому новоприходящему в топик я должен все разжевать по новой? Попробуйте прочитать все, невзирая на многабукав. Если это не поможет понять, почему и когда работает то, что я предлагаю, очевидно, объяснение, что нельзя выдергивать фразы из контекста и путать два разных контекста Вам тоже не поможет.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35465841
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовВы считаете, что каждому новоприходящему в топик я должен все разжевать по новой? Попробуйте прочитать все, невзирая на многабукав. Если это не поможет понять, почему и когда работает то, что я предлагаю, очевидно, объяснение, что нельзя выдергивать фразы из контекста и путать два разных контекста Вам тоже не поможет.
Да прочитал я все Ваши многабуков
Здесь Вы несколько снисходительно заявили, что есть методы попроще, без IS_MAIN-ов
А вот здесь сами его фактически стали использовать в update

Не надо ничего разжевывать по новой, просто скажите (да/нет) нужен атрибут id_main_cust в таблице Работа-ПЗ (подразделение заказчика)
----------------------------------------------
ID_JOB_Customer
ID_JOB
ID_Customer
NPP
?
Если да/нет опять не прозвучит будем считать "методы попроще" несостоятельными.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35466148
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.Pepperпросто скажите (да/нет) нужен атрибут id_main_cust в таблице Работа-ПЗ (подразделение заказчика)
----------------------------------------------
ID_JOB_Customer
ID_JOB
ID_Customer
NPP
?
не нужен.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35466151
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperВы несколько снисходительно заявили, что есть методы попроще, без IS_MAIN-ов
А вот здесь сами его фактически стали использовать в update
По сути npp - это аналог приоритета, а не тупенького is_main, то есть, это обобщение is_main-а.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35466657
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовДа. В перечне подразделений оно будет первым. Или последним. Как захотите. Если сделать функцию, возвращающую по работе ее главное подразделение, можно и отдельно его отображать.
Отлично. Вам ТАК нравится спроектировать GUI. Но у пользователя есть возможность их двигать вверх-вниз?... Одним словом, как бы ни строился пользовательский интерфейс, есть возможность сказать "главное было с id_cust = 2, а теперь пусть будет главным с id_cust = 1" что произойдет с таблицей?... (npp=0 у обеих записей). Я Вас так понял, что всем "неглавным" надо присвоить npp больший, чем у главного?.. одинаковый?.. разный?... В многабукав я не нашел объяснения КАК это должно делаться. Если npp=0 у главного и npp=1 у неглавного, то чем отличается npp от IS_MAIN?...

Сергей ВаскецовПо сути npp - это аналог приоритета, а не тупенького is_main, то есть, это обобщение is_main-а.
напишите, плиз, корректный update при смене главного подразделения, все сразу встанет на свои места...
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35466719
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если мы решаем задачу существования главного подразделения, а не ранжирования подразделений в общем виде, то правильнее, IMHO, сделать отдельную таблицу - "Работа-Главное ПЗ" с PRIMARY KEY(ID_JOB) и FOREIGN KEY ON "Работа-ПЗ" (ID_JOB, ID_Customer). В таблице "Работа-ПЗ" для этого нужен либо PRIMARY KEY(ID_JOB, ID_Customer), либо UNIQUE(ID_JOB, ID_Customer) и CHECK (ID_JOB IS NOT NULL AND ID_Customer IS NOT NULL).
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35466851
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAЕсли мы решаем задачу существования главного подразделения, а не ранжирования подразделений в общем виде, то правильнее, IMHO, сделать отдельную таблицу - "Работа-Главное ПЗ" с PRIMARY KEY(ID_JOB) и FOREIGN KEY ON "Работа-ПЗ" (ID_JOB, ID_Customer). В таблице "Работа-ПЗ" для этого нужен либо PRIMARY KEY(ID_JOB, ID_Customer), либо UNIQUE(ID_JOB, ID_Customer) и CHECK (ID_JOB IS NOT NULL AND ID_Customer IS NOT NULL).
Правда, тогда для списка ВСЕХ подразделений нужен UNION?...
Но интересовали "методы попроще", может быть там есть какое-то рациональное зерно...
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35466911
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.Pepper ChAЕсли мы решаем задачу существования главного подразделения, а не ранжирования подразделений в общем виде, то правильнее, IMHO, сделать отдельную таблицу - "Работа-Главное ПЗ" с PRIMARY KEY(ID_JOB) и FOREIGN KEY ON "Работа-ПЗ" (ID_JOB, ID_Customer). В таблице "Работа-ПЗ" для этого нужен либо PRIMARY KEY(ID_JOB, ID_Customer), либо UNIQUE(ID_JOB, ID_Customer) и CHECK (ID_JOB IS NOT NULL AND ID_Customer IS NOT NULL).
Правда, тогда для списка ВСЕХ подразделений нужен UNION?Или я не понял Ваших сомнений, или Вы несколько невнимательно отнеслись к предложенной схеме. Все подразделения и так находятся в таблице "Работа-ПЗ", включая и "главное". В таблице "Работа-Главное ПЗ" есть только факт, которое из них считать главным. Так что необходимость в UNION "для списка ВСЕХ подразделений" отсутствует.
Sgt.PepperНо интересовали "методы попроще", может быть там есть какое-то рациональное зерно...На мой взгляд, более-менее вменяемый способ был упомянут ранее , но у него есть сильный недостаток.
Для того чтобы обойтись только ограничениями, для таблицы "Работа" надо будет сделать обратный FOREIGN KEY ON "Работа-ПЗ" (ID_JOB, ID_Customer). К сожалению, формально для таблицы "Работа-ПЗ" уже должен быть FOREIGN KEY ON "Работа" (ID_JOB). Т.е., у нас образуется так называемая циклическая связь, что позволяют не все СУБД, да и просто может вызвать сложности с определением, типа, "что раньше - яйцо или курица". Лично я стараюсь избегать таких неоднозначностей в схеме.
Если же обратной связи ("Работа-ПЗ"->"Работа") не делать, то возникает риск ввести в качестве главного подразделения то, которое вовсе не участвует в списке допустимых. Если же считать его допустимым, но дополнительным к списку в "Работа-ПЗ", то оно, во-первых, может оказаться дублирующим, во-вторых, для получения списка всех подразделений придется использовать упомянутый Вами UNION. Кроме того, процедура замены главного подразделения может оказаться не очень тривиальной, хотя при наличии транзакций это и не проблема, но по моему глубочайшему убеждению, нужно стремиться, чтобы изменение одного факта выполнялось за минимальной число модифицирующих операций(в идеале за одну). Так что при всей, казалось бы, простоте решения, на мой взгляд, этот вариант не очень привлекателен в реализации.
В предложенным мною вариант корректность данных определяется стандартным механизмом ограничений. Надеюсь очевидно, что изменение главного подразделения тоже не вызывает каких-либо сложностей, простейший UPDATE.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35466979
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAИли я не понял Ваших сомнений, или Вы несколько невнимательно отнеслись к предложенной схеме. Все подразделения и так находятся в таблице "Работа-ПЗ", включая и "главное". В таблице "Работа-Главное ПЗ" есть только факт, которое из них считать главным. Так что необходимость в UNION "для списка ВСЕХ подразделений" отсутствует.
Согласен, разобрался...
Все дальнейшее тоже вполне приемлимо на первый взгляд, хотя и в IS_MAIN или id_cust_main каких-либо непоправимых бед не усматривается. Просто весь спор был попыткой разобраться в экзотическом решении коллеги. А в принципе проблема, как мне кажется, совершенно пустяковая, не стОит четырех страниц :)
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35467116
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.Pepperв IS_MAIN или id_cust_main каких-либо непоправимых бед не усматривается.Смотря что считать бедой, да еще и непоправимой. На мой взгляд, корректность данных должна максимально определяться схемой БД, а не какой-либо последовательностью кода. Оба упомянутых решения как раз требуют написания такого кода. Более того, если правильно помню определения, то решение с IS_MAIN вообще нарушает 4НФ, которая запрещает зависимость кортежей друг от друга.
Sgt.PepperА в принципе проблема, как мне кажется, совершенно пустяковая, не стОит четырех страницЛирика и злостный офтоп: проблемы всегда в людях, а для этого и четырех страниц может оказаться маловато :)
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35467441
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAЛирика и злостный офтоп: проблемы всегда в людях, а для этого и четырех страниц может оказаться маловато :)
Злостный? :) Больше не буду, воля Ваша. А по поводу "проблемы всегда в людях" не то что четыре страницы, цельные библиотеки написаны, вряд ли мы тут с Вами что-то существенное к Гоголю и Достоевскому добавим, простите еще раз за лирику... :)
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35467925
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperВам ТАК нравится спроектировать GUI
Я начинаю сомневаться в Вашей адекватности. Где-то я давал определенные рекомендации по провектировню GUI, которые бы следовали из предлагаемой мной схемы?

Sgt.PepperНо у пользователя есть возможность их двигать вверх-вниз?
Безусловно есть.

Sgt.Pepperесть возможность сказать "главное было с id_cust = 2, а теперь пусть будет главным с id_cust = 1" что произойдет с таблицей?... (npp=0 у обеих записей)
Если предположить главенство подразделения с максимальным npp, то схематично примерно что-то типа update job_cust set npp=(select max(npp)+1) where id_job=N and id_cust = 1, если уж Вы так привязались к этому "id_cust = 1". Если главное подразделение с минимальным npp - аналогично. Также никто не мешает выполнять update job_cust set npp=(case when id_cust=1 then A else B end) where id_cust in (1,2), что тривиально при необходимости строится прямо из приложения, если хочется сделать кнопки для движения подразделений вверх и вниз.

Sgt.PepperЯ Вас так понял, что всем "неглавным" надо присвоить npp больший, чем у главного?.. одинаковый?.. разный?...
Подумайте еще раз, что Вы написали, и какая цель приследуется при подобном update-е, и какая будет разница, будут ли новые значения npp разными или равными, какие будут последствия. По-моему, я достаточно описал, где и как используется npp, чтобы понять это.

Sgt.PepperВ многабукав я не нашел объяснения КАК это должно делаться
Вроде как топик не ставит задачей объяснить всем, как пишутся update-ы?

Sgt.PepperЕсли npp=0 у главного и npp=1 у неглавного, то чем отличается npp от IS_MAIN?...
Именно поэтому это и является расширением IS_MAIN, к которому сводится наложением дополнительных ограничений. Именно поэтому при допущении, что решение с IS_MAIN работает, будет работать и решение с npp. Какие у него плюсы и минусы, использовать ли его, и в каком случае - пусть решает автор.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35468162
ChA
На мой взгляд, более-менее вменяемый способ был упомянут ранее , но у него есть сильный недостаток.
Для того чтобы обойтись только ограничениями, для таблицы "Работа" надо будет сделать обратный FOREIGN KEY ON "Работа-ПЗ" (ID_JOB, ID_Customer). К сожалению, формально для таблицы "Работа-ПЗ" уже должен быть FOREIGN KEY ON "Работа" (ID_JOB). Т.е., у нас образуется так называемая циклическая связь, что позволяют не все СУБД, да и просто может вызвать сложности с определением, типа, "что раньше - яйцо или курица". Лично я стараюсь избегать таких неоднозначностей в схеме.
Если же обратной связи ("Работа-ПЗ"->"Работа") не делать, то возникает риск ввести в качестве главного подразделения то, которое вовсе не участвует в списке допустимых. Если же считать его допустимым, но дополнительным к списку в "Работа-ПЗ", то оно, во-первых, может оказаться дублирующим, во-вторых, для получения списка всех подразделений придется использовать упомянутый Вами UNION. Кроме того, процедура замены главного подразделения может оказаться не очень тривиальной, хотя при наличии транзакций это и не проблема, но по моему глубочайшему убеждению, нужно стремиться, чтобы изменение одного факта выполнялось за минимальной число модифицирующих операций(в идеале за одну). Так что при всей, казалось бы, простоте решения, на мой взгляд, этот вариант не очень привлекателен в реализации.
В предложенным мною вариант корректность данных определяется стандартным механизмом ограничений. Надеюсь очевидно, что изменение главного подразделения тоже не вызывает каких-либо сложностей, простейший UPDATE.
О каких циклических связях вы говорите? Считайте что это абсолютно разные связи:
1 - "Работа-ПЗ"
2 - "Работа-ПЗ"->"Работа"

И нет ничего страшного что две таблицы ссылаются друг на друга. А какие СУБД не поодерживают этого? В Ыслучайно не путаете с иерархическими связями(когда сущность ссылается сама на себя) и соотвественно иерахическими запросами?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35468167
ChAЕсли мы решаем задачу существования главного подразделения, а не ранжирования подразделений в общем виде, то правильнее, IMHO, сделать отдельную таблицу - "Работа-Главное ПЗ" с PRIMARY KEY(ID_JOB) и FOREIGN KEY ON "Работа-ПЗ" (ID_JOB, ID_Customer). В таблице "Работа-ПЗ" для этого нужен либо PRIMARY KEY(ID_JOB, ID_Customer), либо UNIQUE(ID_JOB, ID_Customer) и CHECK (ID_JOB IS NOT NULL AND ID_Customer IS NOT NULL).

А как в этом случае реализовать обязательность связи Главное ПЗ? Зачем делать сложнее если можно сделать проще?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35469101
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоО каких циклических связях вы говорите?О тех, которые в англоязычных источниках обычно упоминаются как circular. Когда одна сущность ссылается на другую, а та, в свою очередь, ссылается обратно. Формально, это не запрещено, до тех пор пока для этих связей не определены каскадные операции, которые могут породить замкнутый бесконечный цикл в некоторых ситуациях, или наоборот, невозможность модификации, так как изменения в одной таблице будут блокироваться данными в другой таблице, что потребует от СУБД существования не самого простого механизма отложенной(deferrable) проверки ограничений ссылочной целостности.
В некоторых источниках подобные связи считаются логическими ошибками проектирования, так как подобные циклы практически всегда могут быть исключены введением(или существованием) вполне корректных дополнительных сущностей.
Такие связи не имеют никакого отношения к иерархическим связям, которые конечны по сути своей, так как "глубина" такой связи не может превысить количества элементов участвующих в иерархии.

Все очень простоИ нет ничего страшного что две таблицы ссылаются друг на друга.Зависит от ситуации. Вполне может проявится неоднозначность вида "кто на ком стоял ?". IMHO, лучше избегать подобных ситаций, насколько это возможно, хотя готов допустить, что в некоторых случаях такой подход и может оказаться допустимым решением.

Все очень простоА какие СУБД не поодерживают этого?Сейчас уже не вспомню, но как-то давно сталкивался, то ли в древних версиях MS SQL, то ли Informix. В MS SQL 2000, например, есть запрещение на включение каскадности одного типа в прямой и обратной связях одновременно. Хотя в рассматриваемом нами примере это вроде и не требуется, посему теоретически им вполне можно пренебречь.

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

А обязательность в моем случае легко реализуется путем создание ограничения CHECK и указанеим того что это ограниение отложеное (deferable).
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35469435
Сергей Васкецов ChAНе буду скрывать, что мой вариант мне нравится больше, хотя бы потому, что лично я настороженно отношусь к NULLABLE-полям в таблице, тем более, что на самом деле они такими по сути не являются, а их значения контролируются неким кодом произвольной сложности
Еще немаловажен факт, что при отсутствии циклических связей FK могут быть созданы одновременно с созданием таблиц, а не отдельным ALTER-ом потом, даже если СУБД их поддерживает с ограничениями. То есть, нет необходимости дополнительно задумываться над порядком генерации сущностей в скрипте создания БД в случае использования, например, PowerDesigner-а.

Erwin с этим легко справляется.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35469526
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоErwin с этим легко справляется.
Я как бы и не утверждал, что это нереальная проблема вынести создание FK из CREATE TABLE.

Все очень простообязательность в моем случае легко реализуется путем создание ограничения CHECK и указанеим того что это ограниение отложеное ( deferable )
Если говорить о реализации CONSTRAINT-ов, лучше всегда приводить конкретный SQL с указанием, на каких СУБД он будет работать и как.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35469563
Сергей Васкецов
Если говорить о реализации CONSTRAINT-ов, лучше всегда приводить конкретный SQL с указанием, на каких СУБД он будет работать и как.

СУБД ORACLE

ALTER TABLE table1
ADD CONSTRAINT CHK_table1_PZ_NN
CHECK (PZ_ID IS NOT NULL)
DEFERRABLE INITIALLY DEFERRED
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35469568
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоСУБД ORACLE
Относительно прочих что-нибудь знаете столько же определенное?
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35469576
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень простоА обязательность в моем случае легко реализуется путем создание ограничения CHECK и указанеим того что это ограниение отложеное (deferable).Т.е., отложенная проверка ограничения типа NOT NULL ? К моему искреннему сожалению, в MS SQL 2000(топикстартер), 2005, и даже пререлизе 2008 такая возможность отсутствует.
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35469601
ChA
Т.е., отложенная проверка ограничения типа NOT NULL ? К моему искреннему сожалению, в MS SQL 2000(топикстартер), 2005, и даже пререлизе 2008 такая возможность отсутствует.

Мои соболезнования :(
...
Рейтинг: 0 / 0
Несколько связей между двумя таблицами
    #35469605
Сергей Васкецов Все очень простоСУБД ORACLE
Относительно прочих что-нибудь знаете столько же определенное?

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


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