|
|
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
Добрый день! Никак не могу победить следующую проблему. Схема такая: в компании работают сотрудники (t_employees) Компания выполняет разные проекты (t_projects) Для выполнения каждого проекта набирается проектная команда со своим куратором, координатором, и т.п. (t_projteams) Для каждого проекта формируются задачи (этапы) выполнения (t_tasks) На выполнение каждой из этих задач выделяются один или более сотрудников из сформированной проектной команды (t_empltasks) Сотрудники выполняют работы в рамках этих заданий (t_work) Проблема возникает на этапе выбора сотрудников для выполнения поставленных задач. Нужно, чтобы была возможность выбирать сотрудников только из сформированной по данному проекту команды, а данная схема дает возможность выбора вообще любого сотрудника. Понимаю что ошибка где-то рядом с (t_employees - t_empltasks), но если вместо связи (t_employees - t_empltasks) создать связь (t_projteams - t_empltasks), то опять же получится какая-то ерунда, т.к. в таблице t_projteams есть записи одних и тех же сотрудников от разных проектов. Может есть какие-то стандартные решения подобных проблем? Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 15:43 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
>т.к. в таблице t_projteams есть записи одних и тех же сотрудников от разных проектов. но пара сотрудник-проект, выбранная вами как первичный ключ уникальна. Ссылайтесь на нее в таблице t_empltasks. Код: sql 1. 2. 3. 4. 5. >Может есть какие-то стандартные решения подобных проблем? Вам будет легче если для таблицы t_projteams вместо составного первичного ключа вы введете суррогатный id_t_projteams. Тогда t_empltasks может на него ссылаться. Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 20:55 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
упс. я пропустил поле id_task в таблице t_empltasks ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2016, 21:00 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
SERG1257>т.к. в таблице t_projteams есть записи одних и тех же сотрудников от разных проектов. но пара сотрудник-проект, выбранная вами как первичный ключ уникальна. Ссылайтесь на нее в таблице t_empltasks. Да, спасибо, это кажется ближе к тому, что требуется. Правда, здесь выпадает таблица t_tasks, а нужно, чтобы записи в t_empltasks также ссылались на t_tasks. Суть в том, что сначала задачи проекта создаются безотносительно к сотрудникам проектной команды и заносятся в t_tasks, а потом уже распределяются - кому что выполнять. Может еще одну связь добавить (t_tasks - t_empltasks)? И еще вопрос. Я давно не работал с MSSQL, много уже успел забыть, например в чем разница указания references просто в описании столбца (link_prj int references t_projects) от того, когда мы его ставим в описании внешнего ключа (foreign key (link_prj, link_emp) references t_projteams)? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 14:33 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
SERG1257>т.к. в таблице t_projteams есть записи одних и тех же сотрудников от разных проектов. но пара сотрудник-проект, выбранная вами как первичный ключ уникальна. Ссылайтесь на нее в таблице t_empltasks. Код: sql 1. Не, все равно не понимаю. Вот даже здесь (запишу более наглядно): Код: sql 1. 2. 3. 4. 5. 6. 7. Какой смысл ссылаться на t_projects и t_employees? Почему нельзя привязать только к t_projteams? То есть зачем первые два references - ведь в t_projteams уже есть уникальные пары сотрудник-проект. И как правильно привязать t_tasks? Что-то окончательно запутался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 16:35 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
>Какой смысл ссылаться на t_projects и t_employees? Почему нельзя привязать только к t_projteams? Ну не ссылайтесь, кто же неволит.В варианте 2 (с суррогатным id_t_projteams) этого как раз нет >И как правильно привязать t_tasks? Код: sql 1. 2. 3. 4. 5. >например в чем разница указания references просто в описании столбца от того, когда мы его ставим в описании внешнего ключа Для составного fk его нельзя указать в references просто в описании столбца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 17:14 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
SERG1257, Спасибо! Вот вроде совсем близко, но смущает одна деталь - при данной связи ничто не мешает например добавить в таблицу t_empltasks строку, в которой id_proj и id_emp относятся к одному проекту, а id_task относится к другому проекту. Мне кажется, дело в том, что идентификатор проекта id_prj "распараллеливается" по двум независимым направлениям (таблицам -t_tasks и t_projteams). А строки в t_empltasks могут ссылаться на проект "с двух сторон". Не будет ли правильнее например вместо: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. сделать так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. То есть id_proj будет частью внешних ключей с каждой стороны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 19:46 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
Тогда уж переопределите определение первичного ключа в t_tasks как id_proj, id_task ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 20:00 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
SERG1257Тогда уж переопределите определение первичного ключа в t_tasks как id_proj, id_task Точно! В результате, после некоторых переименований, получилась такая структура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2016, 20:19 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
glaz99, твой вопрос вовсе не обязан решаться средствами структуры бд. Можно решать это правилами редактирования данных, триггерами или процедурами. это называется бизнес логика и она не обязана быть реализована именно в структуре бд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 11:20 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
glaz99, тебе достаточно сделать ссылку в empltask не на employee, а на project team. двумя полями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 11:24 |
|
||
|
Вопрос по структуре
|
|||
|---|---|---|---|
|
#18+
glaz99 И еще вопрос. Я давно не работал с MSSQL, много уже успел забыть, например в чем разница указания references просто в описании столбца (link_prj int references t_projects) от того, когда мы его ставим в описании внешнего ключа (foreign key (link_prj, link_emp) references t_projteams)? Спасибо. по эффекту ни в чем. отдельной фразой можно создать многоколоночные fk, с помощью reference - нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 14:17 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39207907&tid=1540364]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 157ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...