Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Несколько связей между двумя таблицами / 25 сообщений из 96, страница 1 из 4
30.07.2008, 11:51
    #35459812
vitaliy14
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько связей между двумя таблицами
Разбираю чужую структуру БД. Между двумя очень объемными таблицами существует порядка 4 связей (3 один к многим и 4-ая многие к многим), наверное для различных запросов. Таблицы нормализованы. Ситуация нормальная??

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

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

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

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

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

1. Нужно сделать unique индекс по полям ID_JOB - ID_Customer - NPP?
2. И считать NPP c 1 для главного?
...
Рейтинг: 0 / 0
30.07.2008, 13:56
    #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
30.07.2008, 14:13
    #35460408
vitaliy14
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько связей между двумя таблицами
Не работает или я вас не понял!

получается

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


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

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

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

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

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

Предложенный тобой вариант технически неграмотный и трудно(много кода, накладно для базы) реализуемый. Насколько я понял мы говорим о многопользовательском домтупе к БД.
Если 1-й твой вариант еще хоть как-то будет что-то гарантировать, то 2-й вообще ничего не будет гарантировать, т.е. будем иметь несоклько главных подразделений. ИМХО решение попахивает ламеризмом.
...
Рейтинг: 0 / 0
30.07.2008, 15:40
    #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]