|
|
|
Ппроблема с проектированием
|
|||
|---|---|---|---|
|
#18+
Есть след. задача: Есть сущность система и сущность модуль . Каждая система имеет набор собственных модулей и внешиних модулей( ссылки на модули, которые в свою очередь являются собстенностью другой какой либо системы). Получается у модуля может быть всего одна "родительская" система и множество систем ссылающихся на неё. Есть след варианты составления бд ( реализванно должно быть в ACCESS ): 1-вариант SYSTEMS ------------ SystemID SystemName MODULES ------------- ModuleID ModuleName SystemID - для указания родительской системы REF_SYSTEMS_MODULES - таблица для определения внешних модулей системы ------------------------ SystemID ModuleID 2-ой вариант SYSTEMS ------------ SystemID SystemName MODULES ------------- ModuleID ModuleName REF_SYSTEMS_MODULES ------------------------ SystemID ModuleID IsPatent - (Boolean) указывает тип связи ( "родитель" или нет ) Второй вариант не нравиться тем , что можно создать модуль для которой буду две системы выступать в качестве родителя ( не соблюдение целостности данных ) Пример: SYSTEMS MODULES REF_SYSTEMS_MODULES 0 Sys0 0 Module 0 0 true !!!! - Для мсодуля Module родитель систиема Sys0 1 Sys2 1 0 true !!!! - Для мсодуля Module родитель систиема Sys1 В первом варианте таких проблем быть не может.( Но присутствует некое дублирование данных) и может возникнуть такая ситуация что для системы будет назначен внешний модуль, уже являющийся собственным. Полезны будут ваши замечания, идеи, другие реализации!!!! Заранее благодарен... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 11:53 |
|
||
|
Ппроблема с проектированием
|
|||
|---|---|---|---|
|
#18+
Второй вариант не нравиться тем , что можно создать модуль для которого буду две системы выступать в качестве родителя ( не соблюдение целостности данных ) Пример: SYSTEMS 0 Sys0 1 Sys2 MODULES 0 Module REF_SYSTEMS_MODULES SysID ModID IsParent 0 0 true !!!! - Для мсодуля Module родитель систиема Sys0 1 0 true !!!! - Для мсодуля Module родитель систиема Sys1 В первом варианте таких проблем быть не может( Но присутствует некое дублирование данных ) и может возникнуть такая ситуация ,что для системы будет назначен внешний модуль, уже являющийся собственным. Полезны будут ваши замечания, идеи, другие реализации!!!! Заранее благодарен... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 12:00 |
|
||
|
Ппроблема с проектированием
|
|||
|---|---|---|---|
|
#18+
И наконец самый нормальный вариант таблиц,который позволяет описать любые типы модулей и их связи: 1.система (id сис) 2.модуль (id модуля) 3.тип связи модуля (id типа связи) - например,входит в систему, родительская система 4.модуль-система (id модуля, id системы, id типа связи) При такой схеме не надо корежить базу в случае появления прочих "родительских" систем.Все решается добавлением нового типа связи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 14:04 |
|
||
|
Ппроблема с проектированием
|
|||
|---|---|---|---|
|
#18+
ShtockИ наконец самый нормальный вариант таблиц,который позволяет описать любые типы модулей и их связи: 1.система (id сис) 2.модуль (id модуля) 3.тип связи модуля (id типа связи) - например,входит в систему, родительская система 4.модуль-система (id модуля, id системы, id типа связи) При такой схеме не надо корежить базу в случае появления прочих "родительских" систем.Все решается добавлением нового типа связи. Это и есть второй вариант предложенный выше( только для связей отдельная таблица). Проблема с целостностью данных остается ! - Можно завести модуль и назначить ему два предка-(. Может есть др. варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 14:14 |
|
||
|
Ппроблема с проектированием
|
|||
|---|---|---|---|
|
#18+
1.ну собственно это не второй вариант,так как в Вашем втором варианте жестко пробито родитель или нет,а тут есть справочник связей. 2.есть 2 варианта задания целостности-если это справочник,который не будет заполняться с немеренной скоростью пятистами пользователями одновременно, то сделайте проверку единственности в триггере-просто считайте там есть ли уже запись с типом родительский (мало того-задачу можно сделать более гибкой-ввести в таблицу типов связей поле Количество элементов связи и там уже ставить нужное количество записей данного типа (например,для родительской пробивать 1,для всех остальных - столько сколько надо,например 100 или 10) и уже именно по этому числу смотреть в триггере+там же можно ставить даже факт обязательности такой связи и в общем обеспечить некое подобие словаря системы по данному типу связей).чтобы не возникло проблемы с многопольз доступом можно вообще накладывать блокировку на таблицу на запись в данный момент (хотя скорее всего эту таблицу будет заполнять 1 пользователь 1 раз за все время жизни системы) 3.если нужно меньше гибкости то добавьте фиктивное поле,по которому постройте уникальный индекс вида (фиктивное поле, тип связи,код системы).для родительского типа ставьте туда 0 и при попытке вставки новой записи будет unique index violation, а для всех остальных записей вставляейте значение из последовательность (sequence) и тогда индекс не будет срабатывать. Но лучше первый вариант,так как позволяет реализовать настраиваемое ограничение, а второй - ненастраиваемое. p.s. по ряду причин (много пользователей,пакетная вставка и нужность обеспечивать такую мутную уникальность ) в аналогичной штуке мы использовали и используем второй вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 15:48 |
|
||
|
Ппроблема с проектированием
|
|||
|---|---|---|---|
|
#18+
Shtock3.если нужно меньше гибкости то добавьте фиктивное поле,по которому постройте уникальный индекс вида (фиктивное поле, тип связи,код системы).для родительского типа ставьте туда 0 и при попытке вставки новой записи будет unique index violation, а для всех остальных записей вставляейте значение из последовательность (sequence) и тогда индекс не будет срабатывать. . Извините, но не понятен этот путь! ( в какой таблице добавть фикт. поле? и т.д. ) Был бы благодарен если бы вы привели небольшой пример табличек с парой записей! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 17:28 |
|
||
|
Ппроблема с проектированием
|
|||
|---|---|---|---|
|
#18+
В табличке REF_SYSTEMS_MODULES.Если не поймете сами до понедельника-с работы напишу пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2007, 21:18 |
|
||
|
Ппроблема с проектированием
|
|||
|---|---|---|---|
|
#18+
Alex@nder! 1. Каждая система имеет набор собственных модулей и внешиних модулей( ссылки на модули, которые в свою очередь являются собстенностью другой какой либо системы). 2. Получается у модуля может быть всего одна "родительская" система и множество систем ссылающихся на неё. Из 1 не следует логически 2 (что только одна "родительская" система). Пример - использование нескольких DLL-ей в нескольких EXE. Тут требуется более сложная логика. Специально не привожу (возможное) решение, но оно ближе ко 2-му варианту, а не к 1-му. Подумайте еще раз, что значит "родительская" и может ли внешний модуль вызываться в конечном итоге не внутри "родительской" подсистемы. А еще лучше более подробно опишите исходную задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2007, 18:19 |
|
||
|
Ппроблема с проектированием
|
|||
|---|---|---|---|
|
#18+
Таблица ref_system_modules (триггер прост значение unique field в зависимости от isparent,если 0 - ставим в unique field 0, иначе число из sequence): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. но все-таки первый вариант с кол-вом модулей с данными типом связи более правильный пмсм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 10:12 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34267569&tid=1544778]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 308ms |

| 0 / 0 |
