powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Несколько связей между двумя таблицами
25 сообщений из 96, страница 1 из 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
25 сообщений из 96, страница 1 из 4
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Несколько связей между двумя таблицами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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