Я разрабатываю схему для набора редакторов документов (редактор электронных таблиц, редактор текстовых документов, редактор PowerPoint и т. Д.). Редакторы будут совместно использовать базу данных, хотя иногда они могут использовать отдельные базы данных. Каждый редактор разделяет много общей информации для каждого документа, но затем - в зависимости от типа документа - также есть информация, относящаяся к редактору.Использование таблиц INTERLEAVE для отношений 1 к 1
Мой вопрос связан с попыткой разработать части схемы, которые будут отличаться для каждого редактора. Предположим, что будет таблица Документов, в которой содержится общая информация о документах вообще (скажем, ID). Кроме того, я хочу связать информацию, относящуюся к конкретному редактору, который имеет отношение 1: 1 с записью Doc. Предлагаемый мною схема является:
CREATE TABLE Docs (
DocId STRING(MAX) NOT NULL,
CreationTime TIMESTAMP NOT NULL,
....
) PRIMARY KEY (DocId);
CREATE TABLE SpreadsheetStuff (
DocId STRING(MAX) NOT NULL,
... spreadsheet-specific information here ...
) PRIMARY KEY (DocId),
INTERLEAVE IN PARENT Docs
ON DELETE CASCADE;
CREATE TABLE TextDocumentStuff (
DocId STRING(MAX) NOT NULL,
... text-document-specific information here ...
) PRIMARY KEY (DocId),
INTERLEAVE IN PARENT Docs
ON DELETE CASCADE;
Мои рассуждения для иметь отдельную таблицу, чтобы изолировать общие части из любого редактора конкретного материала.
Интересно, не требуется ли это, поскольку редакторы могут изменять таблицу Документов по мере необходимости для своих нужд, хотя эта структура работает технически. Другими словами, у меня могло бы быть только тонна дополнительных столбцов в таблице Docs с информацией, специфичной для редактора. Одна из проблем заключается в том, что моя предлагаемая структура может иметь производительность или другие последствия, которые не очевидны.
Является ли это разумной структурой для отношений 1: 1? Есть ли какие-то конкретные рекомендации в отношении лучших практик?
Я являюсь участником команды Cloud Spanner в Google, и некоторые из нас задают здесь вопросы, основанные на некоторых реальных вопросах из внутренних форумов. AFAICT, это разрешено/рекомендуется, но, пожалуйста, сообщите нам, если это проблема. –
Это настоящие вопросы от реальных пользователей, и вопросы и ответы оба качества. Это прекрасный ресурс :) –