Может ли дочерняя таблица Cloud Spanner иметь тот же первичный ключ, что и родительская таблица?

#parent-child #primary-key #google-cloud-spanner

#родитель-потомок #primary-key #google-cloud-spanner

Вопрос:

Может ли дочерняя таблица Cloud Spanner определять тот же первичный ключ, который использует родительская таблица (с чередованием дочерних элементов в родительской таблице)? Я знаю, что первичный ключ дочернего элемента должен использовать первичный ключ родительского в качестве префикса, но требуется ли дочерний ключ для использования хотя бы одного дополнительного столбца? Если разрешено использовать один и тот же ключ, это плохая практика? И если это не разрешено, почему бы и нет?

Например:

 CREATE TABLE Furniture (
  FurnitureId STRING(MAX) NOT NULL,
  MakerId INT64 NOT NULL,
  // additional fields here...
) PRIMARY KEY (FurnitureId, MakerId);

CREATE TABLE FurnitureHistory (
  FurnitureId STRING(MAX) NOT NULL,
  MakerId INT64 NOT NULL,
  // additional fields here...
) PRIMARY KEY (FurnitureId, MakerId),
  INTERLEAVE IN PARENT Furniture;
  

Спасибо!
Питер

Ответ №1:

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

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

И / или

  • Дополнительные поля либо не должны заполняться вообще, либо все (или, по крайней мере, более одного) должны заполняться при заполнении одного из них.