Циклические зависимости во внешних ключах: использовать или избегать?

Мое приложение загружает большое количество данных из базы данных в сложную структуру данных. Структура данных в памяти повторяет структуру базы данных, что означает, что если база данных содержит следующие таблицы:

  • таблица A, ключ - это A1
  • таблица B, ключ - B1, один из столбцов является чужим ключ к [ключу] таблицы A
  • таблица C, ключ - C1, один из столбцов является внешним ключом к [ключу] таблицы B

Затем у меня есть классы A, B и C, и:

  • элемент данных B (B :: m_a) является указателем на A
  • элемент данных C (C :: m_b) является указателем на B

Это означает, что если я загружаю базу данных, что я должен загрузить его в правильном порядке. Если я сначала загружу C, он будет жаловаться, что не может установить значение C :: m_b, потому что экземпляр, на который он должен указывать, не был загружен. Например, если файл XH включает YH, но YH также включает XH, вероятно, у вас плохой дизайн; если класс X зависит от класса Y, и наоборот, у вас, вероятно, плохой дизайн, который должен быть решен путем извлечения этой зависимости и введения третьего класса Z, который зависит от X и Y (X и Y больше не будут зависеть друг от друга) .

Будет ли хорошей идеей распространить это правило проектирования и на проектирование баз данных? Другими словами: предотвращение циклических ссылок во внешних ключах.

7
задан Patrick 8 October 2010 в 14:25
поделиться