Мне довольно стыдно спрашивать об этом, но недавно возникла ситуация, когда мне нужно было создать единую таблицу для трех различных типов банковских организаций, связанных друг с другом. Позвольте мне объяснить.
Представьте себе таблицу BANK, в которой содержатся сведения о управляющем банке или обычном банке, который управляет сельскими филиалами, или сельские филиалы, действующие в рамках этого банка, или филиалы розничных банков, которые не попадают в эту иерархию, а только осуществляют операции с сельскими ветка.
Раньше я решил иметь для них 4 разные таблицы с ограничениями FK (т.е. по одной для управляющего банка, банка, в котором работают сельские филиалы, сельского филиала и филиала розничного банка). Но когда я перешел к созданию таблицы TRANSACTION, я был озадачен, поскольку транзакции могли происходить между любыми из этих объектов (например: между сельским филиалом и розничным филиалом, между самими сельскими филиалами и т. Д.). Это означало, что мне нужно было бы не только вести учет идентификаторов «источника» и «места назначения» банковского субъекта, но и сохранять некоторые данные, чтобы помочь логике приложения определить, к какой ТАБЛИЦЕ присоединиться для выполнения запросов. плохо.
Кроме того, существует таблица USER, и пользователь может принадлежать к любой из этих сущностей, в этом случае проблематично также наличие 4 разных таблиц банковских сущностей. Как я узнаю, принадлежит ли Пользователь сельскому отделению, розничному отделению или управляющему банку?
Поэтому я создал одну таблицу BANK (в основном потому, что они являются похожими объектами, поскольку они могут взаимодействовать друг с другом). Я добавил в таблицу столбец PARENT, в котором будет храниться значение идентификатора родительского учреждения (отношения, которые в противном случае я достиг, используя FK). Таким образом, сельское отделение будет иметь идентификатор операционного банка в родительской колонке. Розничные филиалы не имеют родителей, поэтому там значение равно NULL и т. Д.
Проблема, которую я вижу сейчас, заключается в том, что в таблице BANK есть отношение PK / FK, циклическая ссылка.
Мой вопрос: насколько это плохо? И какой может быть выход?