0

Я интересно, если такая структура будет работать нормально:Внешний ключ в качестве составного ключа в нескольких дочерних таблицах

TABLE_A 
- ID_A (PK) 
- other data 

TABLE_B 
- ID_B (PK) 
- ID_A (FK,PK) 
- other data 

TABLE_C 
- ID_C (PK) 
- ID_B (FK) 
- ID_A (FK,PK) 
- other data 

TABLE_D 
- ID_D (PK) 
- ID_C (FK) 
- ID_A (FK,PK) 
- other data 

Я пытаюсь создать БД, где будет несколько концентраторов холдинга independet данных друг от друга и центральную точку, которая будет агломерировать все данные со всех концентраторов. ID_A идентифицирует определенный концентратор, поэтому я нажимаю его в каждой дочерней таблице. Совокупный ключ ID_A + ID_x создается для того, чтобы легко найти реконверсию в центральной точке (или части данных из концентратора A). Имеет ли такая структура смысл? Если нет, есть ли лучший способ сделать это?

Заранее благодарим за ответ!

ответ

0

Я бы посоветовал иметь числовые первичные ключи с одним столбцом (часто называемые «синтетические» первичные ключи). Они удобны по целому ряду причин:

  • Ссылка на внешний ключ должна занимать только один столбец.
  • Изменение значения в «составном» первичном ключе легко, потому что это всего лишь атрибут, хранящийся в одной таблице.
  • Индексы полей с фиксированной шириной более эффективны (часто составные клавиши включают строки).
  • Если ключ является автоматическим приращением, он обеспечивает запись порядка вставки записей в таблицу.

Затем вы можете объявить свои текущие первичные ключи уникальными, а не нулевыми, используя соответствующие ограничения.

В результате больше как это:

TABLE_A

  • PK_A
  • другие данные

TABLE_B

  • PK_B - уникальный в B
  • PK_A - относится к A
  • ID_B - Что бы это ни было. Это «id», но не уникален.
  • другие данные

TABLE_C - PK_C - уникальные в C - ID_C - Что бы это. Это «id», но не является уникальным. - PK_B - PK_A - При необходимости. Это может быть доступно через B. - другие данные

TABLE_D

  • PK_D - уникальный в этой таблице.
  • ID_D - Что бы это ни было. Это «id», но не уникален.
  • PK_C
  • PK_A - При необходимости. Доступ к нему возможен через C, B и A.
  • другие данные
+0

Спасибо за ответ, но я думаю, что это не то, что я искал. Предположим, что есть 3 сервера. У двух из них есть свои собственные БД (одна и та же структура), но разные данные. У третьей БД были бы данные из БД # 1 и БД # 2 (сумма), и мне нужен способ отличить данные. Таблицы данных на трех серверах выглядят примерно так: https://docs.google.com/spreadsheets/d/1j24tQKEvX_OpmULEquPt1ixVK9KcjhJ2Vg9TEAtouZQ/edit?usp=sharing Есть ли какой-либо простой способ его достижения? –

Смежные вопросы