powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ппроблема с проектированием
9 сообщений из 9, страница 1 из 1
Ппроблема с проектированием
    #34267539
Alex@nder!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть след. задача:
Есть сущность система и сущность модуль . Каждая система имеет набор собственных модулей и внешиних модулей( ссылки на модули, которые в свою очередь являются собстенностью другой какой либо системы). Получается у модуля может быть всего одна "родительская" система и множество систем ссылающихся на неё.

Есть след варианты составления бд ( реализванно должно быть в 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

В первом варианте таких проблем быть не может.( Но присутствует некое дублирование данных) и может возникнуть такая ситуация что для системы будет назначен внешний модуль, уже являющийся собственным.

Полезны будут ваши замечания, идеи, другие реализации!!!!
Заранее благодарен...
...
Рейтинг: 0 / 0
Ппроблема с проектированием
    #34267569
Alex@nder!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Второй вариант не нравиться тем , что можно создать модуль для которого буду две системы выступать в качестве родителя ( не соблюдение целостности данных )
Пример:
SYSTEMS
0 Sys0
1 Sys2

MODULES
0 Module

REF_SYSTEMS_MODULES
SysID ModID IsParent
0 0 true !!!! - Для мсодуля Module родитель систиема Sys0
1 0 true !!!! - Для мсодуля Module родитель систиема Sys1

В первом варианте таких проблем быть не может( Но присутствует некое дублирование данных ) и может возникнуть такая ситуация ,что для системы будет назначен внешний модуль, уже являющийся собственным.

Полезны будут ваши замечания, идеи, другие реализации!!!!
Заранее благодарен...
...
Рейтинг: 0 / 0
Ппроблема с проектированием
    #34268172
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И наконец самый нормальный вариант таблиц,который позволяет описать любые типы модулей и их связи:
1.система (id сис)
2.модуль (id модуля)
3.тип связи модуля (id типа связи) - например,входит в систему, родительская система
4.модуль-система (id модуля, id системы, id типа связи)


При такой схеме не надо корежить базу в случае появления прочих "родительских" систем.Все решается добавлением нового типа связи.
...
Рейтинг: 0 / 0
Ппроблема с проектированием
    #34268221
Alex@nder!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShtockИ наконец самый нормальный вариант таблиц,который позволяет описать любые типы модулей и их связи:
1.система (id сис)
2.модуль (id модуля)
3.тип связи модуля (id типа связи) - например,входит в систему, родительская система
4.модуль-система (id модуля, id системы, id типа связи)


При такой схеме не надо корежить базу в случае появления прочих "родительских" систем.Все решается добавлением нового типа связи.

Это и есть второй вариант предложенный выше( только для связей отдельная таблица). Проблема с целостностью данных остается ! - Можно завести модуль и назначить ему два предка-(. Может есть др. варианты?
...
Рейтинг: 0 / 0
Ппроблема с проектированием
    #34268644
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.ну собственно это не второй вариант,так как в Вашем втором варианте жестко пробито родитель или нет,а тут есть справочник связей.
2.есть 2 варианта задания целостности-если это справочник,который не будет заполняться с немеренной скоростью пятистами пользователями одновременно, то сделайте проверку единственности в триггере-просто считайте там есть ли уже запись с типом родительский (мало того-задачу можно сделать более гибкой-ввести в таблицу типов связей поле Количество элементов связи и там уже ставить нужное количество записей данного типа (например,для родительской пробивать 1,для всех остальных - столько сколько надо,например 100 или 10) и уже именно по этому числу смотреть в триггере+там же можно ставить даже факт обязательности такой связи и в общем обеспечить некое подобие словаря системы по данному типу связей).чтобы не возникло проблемы с многопольз доступом можно вообще накладывать блокировку на таблицу на запись в данный момент (хотя скорее всего эту таблицу будет заполнять 1 пользователь 1 раз за все время жизни системы)
3.если нужно меньше гибкости то добавьте фиктивное поле,по которому постройте уникальный индекс вида (фиктивное поле, тип связи,код системы).для родительского типа ставьте туда 0 и при попытке вставки новой записи будет unique index violation, а для всех остальных записей вставляейте значение из последовательность (sequence) и тогда индекс не будет срабатывать.

Но лучше первый вариант,так как позволяет реализовать настраиваемое ограничение, а второй - ненастраиваемое.

p.s. по ряду причин (много пользователей,пакетная вставка и нужность обеспечивать такую мутную уникальность ) в аналогичной штуке мы использовали и используем второй вариант.
...
Рейтинг: 0 / 0
Ппроблема с проектированием
    #34269012
Alex@nder!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shtock3.если нужно меньше гибкости то добавьте фиктивное поле,по которому постройте уникальный индекс вида (фиктивное поле, тип связи,код системы).для родительского типа ставьте туда 0 и при попытке вставки новой записи будет unique index violation, а для всех остальных записей вставляейте значение из последовательность (sequence) и тогда индекс не будет срабатывать.
.
Извините, но не понятен этот путь! ( в какой таблице добавть фикт. поле? и т.д. ) Был бы благодарен если бы вы привели небольшой пример табличек с парой записей!
...
Рейтинг: 0 / 0
Ппроблема с проектированием
    #34270114
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В табличке REF_SYSTEMS_MODULES.Если не поймете сами до понедельника-с работы напишу пример.
...
Рейтинг: 0 / 0
Ппроблема с проектированием
    #34270642
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex@nder!
1. Каждая система имеет набор собственных модулей и внешиних модулей( ссылки на модули, которые в свою очередь являются собстенностью другой какой либо системы).
2. Получается у модуля может быть всего одна "родительская" система и множество систем ссылающихся на неё.
Из 1 не следует логически 2 (что только одна "родительская" система).
Пример - использование нескольких DLL-ей в нескольких EXE.

Тут требуется более сложная логика. Специально не привожу (возможное) решение, но оно ближе ко 2-му варианту, а не к 1-му. Подумайте еще раз, что значит "родительская" и может ли внешний модуль вызываться в конечном итоге не внутри "родительской" подсистемы.

А еще лучше более подробно опишите исходную задачу.
...
Рейтинг: 0 / 0
Ппроблема с проектированием
    #34271255
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица ref_system_modules (триггер прост значение unique field в зависимости от isparent,если 0 - ставим в unique field 0, иначе число из sequence):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
id system | id module |  isparent | unique field |            Значение последовательности
1              1                1           0                             0    
1              2                0           1                             1
1              3                0           2                             2
2              4                1           0                             2
2              5                0           3                             3
пытаемся вставить дурку
2              6                1           0            - не проходит, срабатывает уникальный индекс (id 
                                                               system, isparent,unique field) 
       


но все-таки первый вариант с кол-вом модулей с данными типом связи более правильный пмсм.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ппроблема с проектированием
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]