Я знаю, что это круговая ссылка, но мне трудно понять, почему это плохо

У нас есть проект, в котором мне нужно сделать некоторую работу ETL в новую базу данных, созданную другой компанией. Просматривая диаграмму базы данных, предоставленную мне разработчиками, я увидел, что была круговая ссылка на 4 таблицы:

Я не могу загрузить диаграмму, но вот общая структура таблиц:

ДЕЛО

  • ID (PK) ДЕЛОStatusInfo (FK)
  • SignOffPlanning (FK)
  • SignOffReportReview (FK)
  • SignOffQuarterlyReview (FK)

ДЕЛОStatusInfo

  • ID (PK)
  • ДЕЛОId (FK)

SignOffPlanning

  • ID (PK)
  • ДЕЛОId (FK)

SignOffReportReview

  • ID (PK)
  • ДЕЛОId (FK)

SignOffQuarterlyReview

  • ID (PK)
  • ДЕЛОId (FK)

How these Info tables linked to the ДЕЛО table will be used is that it will be storing historic statuses of a ДЕЛО by having the primary key stored within each Info table. This really does make logical sense but i feel that it might have been better to normalize these tables even further to keep the historic data in those normalized tables.

Мой вопрос: какие проблемы могут возникнуть из-за наличия такого типа структуры базы данных вместо дальнейшей нормализации таблиц?

0
nl ja de

1 ответы

Похоже, вам действительно нужны отношения 1-1 с этими таблицами. Я предполагаю, что каждая из таблиц может иметь кучу других свойств, поэтому я мог бы понять, почему вы не хотели бы объединять их в гигантскую таблицу ДЕЛО. В этом случае ... вы можете комбинировать PK/FK, чтобы заставить отношения 1-1 ...

ДЕЛО

  • ID (PK)
  • ДЕЛОStatusInfo (FK)
  • SignOffPlanning (FK)
  • SignOffReportReview (FK)
  • SignOffQuarterlyReview (FK)

ДЕЛОStatusInfo

  • ДЕЛОId (PK, FK)

SignOffPlanning

  • ДЕЛОId (PK, FK)

SignOffReportReview

  • ДЕЛОId (PK, FK)

SignOffQuarterlyReview

  • ДЕЛОId (PK, FK)
0
добавлено
Если вы внимательно посмотрите на мой ответ, циркулярные ссылки исчезли? Конечно, CaseStatusInfo, SignOffPlanning, SignOffReportReview и SignOffQuartelyReview не могут существовать, если этот случай удален. Однако это также будет иметь место и в вашей таблице (если в этих таблицах CaseId не имеет значения NULL). Я бы предположил, однако, что вы также будете хранить данные о случаях «исторических данных» ...
добавлено автор Felix, источник
Я должен указать, что при вставке одной из этих таблиц CaseId = Case.Id связанной записи случая.
добавлено автор Felix, источник
Привет, Феликс. Я действительно хочу отношения 1-1, но избегаю круговой ссылки. Как они объяснили мне, эта структура помогает хранить исторические данные (которые я чувствую, это ленивый способ сделать это). Помимо моей нелюбви к этой структуре, я не уверен, какие проблемы будут использовать этот дизайн, кроме того, что в круговой ссылке.
добавлено автор Henry, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

dbGeeks
dbGeeks
545 участник(ов)

Чат про базы данных, их устройство и приемы работы с ними. Разрешаются любые адеватные дискуссии в рамках тематики чата.

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Разработка СУБД
Разработка СУБД
143 участник(ов)