|
|
|
Составной ключ
|
|||
|---|---|---|---|
|
#18+
Скажу сразу что в БД я новичок, а про составные ключи только слышал в теории... Ворпос: Есть таблица сотрудников с полями : ( *ID_USER* , Fam,Nam, ....... etc) Есть таблица Стаж с полями : ( *ID_USER*, *ID_STAJ* ,DATE..... etc) Поля в таблице стаж я сделал составным первичным ключом, чтоб однозначно можно было идентифицировать связку пользователь-стаж. Но вот вопрос, для связи с таблицей сотрудников... по какм полям нужно организовывать связь ?? только по полю ID_USER таблицы сотрудники ?? Я просто не очень предсьтавляю себе составные ключи... надо ли добавлять поле ID_STAJ_SOTR к сотрудникам ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2012, 09:39 |
|
||
|
Составной ключ
|
|||
|---|---|---|---|
|
#18+
зачем может понадобиться поле *ID_STAJ*? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2012, 09:41 |
|
||
|
Составной ключ
|
|||
|---|---|---|---|
|
#18+
JesterOK, Причем хитро получается - в таблице Стаж ID_USER составной первичный ключ во время связи является внешним ключом к таблице сотрдуники... Смущает меня сей факт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2012, 09:42 |
|
||
|
Составной ключ
|
|||
|---|---|---|---|
|
#18+
Naf, Есть несколько типов стажа - научный, ненаучный, производственный и так далее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2012, 09:43 |
|
||
|
Составной ключ
|
|||
|---|---|---|---|
|
#18+
JesterOKNaf, Есть несколько типов стажа - научный, ненаучный, производственный и так далее тогда составным уникальным ключом должен быть (Сотрудник,ТипСтажа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2012, 09:54 |
|
||
|
Составной ключ
|
|||
|---|---|---|---|
|
#18+
Naf, Так и есть... в таблице сотрдуники это составной ключ... просто СОТРУДНИКИ (ИД, ТИП СТАЖА) и ИД берется из другой таблицы как внешний ключ, получается что поле ИД в СОТРУДНИКИ является частью первичного ключиа и одновременно внешним ключом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2012, 10:04 |
|
||
|
Составной ключ
|
|||
|---|---|---|---|
|
#18+
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, а изменение в базе при изменении бизнес-требований будут значительно проще в будущем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2012, 10:45 |
|
||
|
Составной ключ
|
|||
|---|---|---|---|
|
#18+
Степка, порпобую.. подумаю... Еще ворпос - есть таблица документы, есть сотрдуники... тк у каждого сотрудника только один документ может быть.. хотел сделать связь один к одному . но постоянн ополучаю ошибку при указании в SSMS каскадного удаления и обновления... в чем моя ошибка ?? каскадные связи не поддерживаются разве на отношениях один к одному ?? типы совпадают, одно поле ключевое второе сделал уникальным.. Рядом создаю связь с подобной таблицей все создается.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2012, 12:10 |
|
||
|
Составной ключ
|
|||
|---|---|---|---|
|
#18+
поясню, есть ГЛАВНАЯ таблица (ИД smallint, блаблабла) ВТОРАЯ ТАБЛИЦА (ИД smallint БЛАБЛАБЛА) ТРЕТЬЯ ТАБЛИЦА (ИД smallint БЛАБЛАБЛА) Данные идет связью один к одному, только вторая таблица связь создается каскадными ограничениями, а третья нет.. пишет что возможно зацикливание и множественные повторяющиеся связи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2012, 12:13 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37726815&tid=1541769]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
180ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 535ms |

| 0 / 0 |
