私は、一連のドキュメントエディタ(スプレッドシートエディタ、テキストドキュメントエディタ、パワーポイントエディタなど)のスキーマを設計しています。編集者はデータベースを共有しますが、いつかは別のデータベースを使用することがあります。各エディタは、各ドキュメントについて多くの共通情報を共有しますが、ドキュメントの種類に応じて、エディタ固有の情報もあります。1対1の関係にINTERLEAVEテーブルを使用する
私の質問は、エディタごとに異なるスキーマの部分を設計しようとしたことに由来します。ドキュメントに関する一般的な情報(IDなど)を保持するDocsテーブルがあるとします。これに加えて、Docレコードと1対1の関係を持つ特定のエディタに固有の情報を関連付ける必要があります。私の提案スキーマは次のとおりです。
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:1の関係では合理的な構造ですか?ベストプラクティスに関する明確なガイダンスはありますか。
私はGoogleのCloud Spannerチームのメンバーです。私たちの中には、社内フォーラムの実際の質問に基づいて質問をあらかじめ入力している人もいます。 AFAICT、これは許可されていますが、問題がある場合はお知らせください。 –
これは実際のユーザーからの本当の質問であり、質問と回答はどちらも高品質です。これは素晴らしいリソースです:) –