Благодарю за комментарии.
Теперь по порядку...
Galogen, очень ценное замечание насчет использования композиции. Я по наивности приписывал агрегации свойства, которыми она не обладает, являясь исключительно концептуальной. Если заменить агрегацию на композицию, то все становится именно так как нужно, но меня несколько смущает определение, данное композиции в [1]:
"Композиция - это форма агрегации с четко выраженными отношениями владения и совпадением времени жизни целого и частей. Части с нефиксированной множественностью могут быть созданны после самого композита, но однажды созданные живут и умирают вместе с ним. Кроме того, такие части могут быть явно удалены перед "смертью" композита." Вот тут непонятный момент с совпадением жизни. Я хочу иметь возможность создавать и удалять части в любой момент жизни целого и не могу понять позволяет ли мне это определенная выше композиция. Если здесь "перед смертью" означает, что после удаления части и до смерти целого не должно быть созданий и удалений других частей, то все впорядке. Помогите пожалуйста прояснить этот момент.
А ERWin не подойдет?
Дело в том, что в данном случае я планирую использовать не реляционную базу данных, а иерархическую, конкретнее, xml-файл или их набор (еще не решил), поэтому, хотя речь и идет о концептуальной модели базы, я сразу выделяю иерархичность, используя ассоциации-композиции. Насколько я понимаю, нотация ERM напрямую не поддерживает иерархичность, может быть только какая-нибудь расширенная версия..
Кажется, модель делана в VP UML?
В этом вы правы, сразу видно наметаный глаз специалиста
Скажу больше, в этом инструменте присутстует возможность создавать ORM - диаграммы для описания БД, и набор связей здесь гораздо шире, в т.ч. доступна и композиция. Возможно, эта нотация подошла бы лучше, пожалуй, попробую на досуге с ней разобраться.
Хотя а что если одни и теже группы встречаются в разных проектах, так же как и требования?
Если я правильно понимаю, то множественность
Project 1 : * Group четко заявляет, что
любая Группа, если она существует, принадлежит одному и только одному Проекту. Если вы имели ввиду, что хорошо бы позволить одному и тому же Требованию или Группе входить в состав нескольких Групп/Проектов, то я такую возможность отрицаю, пользуясь привелегиями автора
(На самом деле, потому что тогда придется возиться с трассировкой, блокировать сделанные изменения пока они не будут одобренны во всех местах включения требования или еще как-то, а я не хочу)
Всетаки рефлексифную связь на сущности Группа я показал бы более четко, возможно с указанием роли (Главная - подчиненная)
С композицией в необходимость в этом отпадает, из-за ее "...четкого выражения отношений владнения...".
1. Почему есть RequirementID, но нет, например, ProjectID
Григорий, RequirementID служит отнюдь не для связывания сущностей, просто в системах управления требованиями принято присваивать требованиям уникальные идентификаторы.
2. Reguirement *:1 Group, Group *:1 Project -> Reguirement *:1 Project как следствие и отдельное обозначение Reguirement *:1 Project лишнее
Здесь интереснее. Я создал связь Requirement *:1 Project для того, чтобы показать, что наряду с Группами в Проект могут включаться и Требования напрямую, имхо, без этой связи такое было бы невозможно. Вы не согласны?
Ну звездочка говорить лишь о максимальной кардинальности кратности, минимальная тут не оговоривается.
Да я согласен нужно точно это передать. Думаю лучшим решением тут необязательность дочерней сущности. А то так и группу не создашь, и проект на введешь, пока не определишь группу, требование, рисунок, или соотвествие :-)
Я так понимаю, меня опять подвело мое "додумывание" в стиле "но это же логично!"... Когда я обозначаю множественность *, то имею ввиду 0..*, так как не сомневался в том, что звездочка допускает и отсутствие реализаций класса, если их количество не ограничено б'ольшим числом. Соответственно, Проект может существовать и в отсутствие подчиненных объектов. Лучше не экономить на символах, да?
1. А я вообще не понял зачем тут группа? Нельзя просто требования связать в виде иерархии и привязать к Проекту?
2. А как мы бум трассировать требования?
3. Не понятно назначение RequirementPart? Это сам тесткс или ссылка место в тексте Requirement.Content? Если последнее, то м.б. оргнизовать как-то Requirement.Content в виде отдельных кусков?
4. Нужны атрибуты требований
Вообще, рекомендую посмотреть релизацию любого Wiki движка, там все есть для СУТ, надо только кое-что добавить, что спечифично для СУТ.
1.
bas, а что значит "требования связать в виде иерархии"? Я не очень себе это представляю... Расскажите, пожалуйста, как вы это видите. Группу я ввел для "группировки" требований, что удобно, особенно когда их много.
2. Не будем
4. Для моей конкретной задачи, пожалуй, не нужны
<Вообще...>. Спасибо за рекомендацию. Но данном случае речь не идет о реализации полноценной СУТ.
и, наконец, 3... Пока не хочется вдаваться в подробности, скажу только что Accordance.RequirementPart ссылается на конкретную часть текста конкретного требования.
пора ФАК писать по ДК
ДК - диаграмма классов, я правильно понимаю? Тогда скорее нужно писать ФАК по связям
И в финале написания этого поста прикрепляю следующую версию модели, чтобы обсуждение теперь шло вокруг нее. Аргегация заменена композицией, думаю пока этого достаточно.
З.Ы.: Увидел возможную непонятку в модели... У меня получается, что группа может входить и в состав проекта и в состав другой группы одновременно, так? Это было бы крайне нежелательно... Группа может входить в состав самой себя? Как этого избежать? Или у меня просто начался ночной тупняк?
---------------------------------------------
[1]: Буч, Рамбо, Якобсон. Язык UML. Руководство пользователя. 2-е изд.: Пер. с англ. Мухин Н. - М.: ДМК Пресс, 2007. (Перевод не очень нравится, наверное, в оригинале лучше)