|
|
|
Взаимозависимые свойства
|
|||
|---|---|---|---|
|
#18+
Помогите, пожалуйста, разобраться. Задача такая: есть две таблицы, связанные [1:N] обычным FK. Допустим, список отделов и список сотрудников в них. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Необходимо навесить к ним дополнительное условие — если в отделе есть сотрудники, один ( и только один ) из них должен быть как-то отмечен. Например, пусть эта метка будет означать начальника отдела. Как это реализовать? Мысль первая — добавить поле Код: plaintext 1. Мысль вторая — наоборот, добавить поле Код: plaintext 1. Хотелось бы что-то вроде в departments : Код: plaintext 1. 2. 3. Вот такая вот проблема. Или прослоечную таблицу сделать? Не знаю, какую. Вообще, можно ли обеспечить целостность, обойдясь без триггеров? Помогите, pls! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 17:07 |
|
||
|
Взаимозависимые свойства
|
|||
|---|---|---|---|
|
#18+
xarg, Это уже не целостность, а бизнес-правила. Промежуточная таблица в дальнейшем позволит расширить функциональность, например, хранить период руководства отделом. Триггер поможет контролировать соблюдение этого бизнес-правила. Но реально всё это надо делать на клиенте. "Вы удаляете сотрудника, являющегося начальником отдела. Необходимо назначить нового начальника!" Или у вас новый начальник будет выбираться случайным образом? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 21:15 |
|
||
|
Взаимозависимые свойства
|
|||
|---|---|---|---|
|
#18+
zenkИли у вас новый начальник будет выбираться случайным образом? :-) Эх, не хотел вдаваться в подробности, просто на примере изложить, а получилось только хуже :) Да, в моем случае система должна сама выбирать «начальника» — запись с наибольшим emp_id для данного dep_id. Так что этот момент выносить в клиента нельзя. Видимо, надо использовать триггер? zenkПромежуточная таблица в дальнейшем позволит расширить функциональность, например, хранить период руководства отделом. Что-то я никак не соображу, какой она должна быть. Подскажите, пожалуйста. Спасибо за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2010, 00:05 |
|
||
|
Взаимозависимые свойства
|
|||
|---|---|---|---|
|
#18+
xargЧто-то я никак не соображу, какой она должна быть. Как вариант... Тип действияКодНазвание Движение нач.отделовКодДатаКод сотрудникаКод действия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2010, 08:33 |
|
||
|
Взаимозависимые свойства
|
|||
|---|---|---|---|
|
#18+
xarg, Id, Dep_Id, Emp_Id, DBegin, DEnd И повесить уникальные индексы на (Dep_Id, DBegin) - в каждый момент времени отдел может иметь не более 1 начальника; и на (Emp_Id, DBegin) - в каждый момент времени сотрудник может руководить не боле чем 1 отделом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2010, 09:38 |
|
||
|
Взаимозависимые свойства
|
|||
|---|---|---|---|
|
#18+
krvsa, zenk, спасибо! Правда, появится лишняя функциональность, но она не помешает. Теперь уже сам разберусь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2010, 12:30 |
|
||
|
Взаимозависимые свойства
|
|||
|---|---|---|---|
|
#18+
xarg, Поторопился я и ошибся спросонья. Уникальные индкесы не нужны - они всё равно мало что дают, поскольку уникальность DBegin для каждого объекта ещё ничего не гарантируют. В триггере в любом случае придётся проверять непересекаемость диапазонов дат для каждого объекта (департамента или человека). Извините за мою оплошность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2010, 13:15 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36680314&tid=1542672]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 485ms |

| 0 / 0 |
