powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Составной ключ
10 сообщений из 10, страница 1 из 1
Составной ключ
    #37726792
JesterOK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажу сразу что в БД я новичок, а про составные ключи только слышал в теории...

Ворпос: Есть таблица сотрудников с полями : ( *ID_USER* , Fam,Nam, ....... etc)
Есть таблица Стаж с полями : ( *ID_USER*, *ID_STAJ* ,DATE..... etc)

Поля в таблице стаж я сделал составным первичным ключом, чтоб однозначно можно было идентифицировать связку пользователь-стаж.

Но вот вопрос, для связи с таблицей сотрудников... по какм полям нужно организовывать связь ?? только по полю ID_USER таблицы сотрудники ??

Я просто не очень предсьтавляю себе составные ключи... надо ли добавлять поле ID_STAJ_SOTR к сотрудникам ?
...
Рейтинг: 0 / 0
Составной ключ
    #37726795
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем может понадобиться поле *ID_STAJ*?
...
Рейтинг: 0 / 0
Составной ключ
    #37726798
JesterOK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JesterOK,

Причем хитро получается - в таблице Стаж ID_USER составной первичный ключ во время связи является внешним ключом к таблице сотрдуники...

Смущает меня сей факт
...
Рейтинг: 0 / 0
Составной ключ
    #37726800
JesterOK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Naf,
Есть несколько типов стажа - научный, ненаучный, производственный и так далее
...
Рейтинг: 0 / 0
Составной ключ
    #37726815
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JesterOKNaf,
Есть несколько типов стажа - научный, ненаучный, производственный и так далее
тогда составным уникальным ключом должен быть (Сотрудник,ТипСтажа)
...
Рейтинг: 0 / 0
Составной ключ
    #37726829
JesterOK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Naf,

Так и есть... в таблице сотрдуники это составной ключ... просто СОТРУДНИКИ (ИД, ТИП СТАЖА) и ИД берется из другой таблицы как внешний ключ, получается что поле ИД в СОТРУДНИКИ является частью первичного ключиа и одновременно внешним ключом
...
Рейтинг: 0 / 0
Составной ключ
    #37726917
Степка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JesterOKСкажу сразу что в БД я новичок, а про составные ключи только слышал в теории...

Ворпос: Есть таблица сотрудников с полями : ( *ID_USER* , Fam,Nam, ....... etc)
Есть таблица Стаж с полями : ( *ID_USER*, *ID_STAJ* ,DATE..... etc)

Поля в таблице стаж я сделал составным первичным ключом, чтоб однозначно можно было идентифицировать связку пользователь-стаж.

Но вот вопрос, для связи с таблицей сотрудников... по какм полям нужно организовывать связь ?? только по полю ID_USER таблицы сотрудники ??

Я просто не очень предсьтавляю себе составные ключи... надо ли добавлять поле ID_STAJ_SOTR к сотрудникам ?
Если Вам потребуется сделать к таблице Стаж дочернюю, то она должна будет ссылаться на таблицу Стаж уже не по одному, а по двум полям (по полям первичного ключа в таблице Стаж). Кроме того, в запросах update, delete придется использовать 2 поля первичного ключа, чтобы поменять/удалить ровно одну строчку. Не очень удобно. А если потом бизнес-требования поменяются, и в какой-то момент пара значений (ID_USER, ID_STAJ) уже не будет давать уникальности, то Вам придется писать довольно сложные запросы по рефакторингу структуры базы, особенно в подчиненных таблицах, если такие будут. Поэтому составных ключей лучше по возможности избегать, но это имхо.

Попробуйте сделать таблицу Стаж с такими полями : ( ID_STAJ, ID_USER, ID_STAJ_TYPE ,DATE..... etc)
, где:
ID_STAJ - первичный ключ, автоинкрементное поле, т.е. сплошная нумерация по всей таблице

ID_STAJ_TYPE - тип стажа - то, что у Вас называлось ID_STAJ
И добавьте уникальный индекс по полям (ID_USER, ID_STAJ_TYPE).

Тогда все дочерние таблицы будут ссылаться натаблицу Стаж по единственному полю ID_STAJ, а изменение в базе при изменении бизнес-требований будут значительно проще в будущем.
...
Рейтинг: 0 / 0
Составной ключ
    #37727089
JesterOK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Степка,

порпобую.. подумаю...

Еще ворпос - есть таблица документы, есть сотрдуники... тк у каждого сотрудника только один документ может быть.. хотел сделать связь один к одному . но постоянн ополучаю ошибку при указании в SSMS каскадного удаления и обновления...

в чем моя ошибка ?? каскадные связи не поддерживаются разве на отношениях один к одному ?? типы совпадают, одно поле ключевое второе сделал уникальным..

Рядом создаю связь с подобной таблицей все создается..
...
Рейтинг: 0 / 0
Составной ключ
    #37727099
JesterOK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поясню, есть ГЛАВНАЯ таблица (ИД smallint, блаблабла)
ВТОРАЯ ТАБЛИЦА (ИД smallint БЛАБЛАБЛА)
ТРЕТЬЯ ТАБЛИЦА (ИД smallint БЛАБЛАБЛА)

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

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


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