我正在設計一組文檔編輯器(電子表格編輯器,文本文檔編輯器,Powerpoint編輯器等)的模式。編輯們將共享一個數據庫,儘管他們可能會在某一天使用不同的數據庫。每個編輯都會爲每個文檔分享大量的常用信息,但是,根據文檔類型的不同,還有編輯器特定的信息。使用INTERLEAVE表進行1對1關係
我的問題來自於嘗試設計架構中每個編輯器都不相同的部分。假設將會有一個Docs表,它包含關於一般文檔的常見信息(比如ID)。最重要的是,我想將特定於與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表格,即使此結構在技術上可行。換句話說,我可以在Docs表中添加大量額外的列,並提供與編輯器相關的信息。一個問題是我提出的結構可能會有不明顯的表現或其他影響。
這是1:1關係的合理結構嗎?有沒有關於最佳實踐的明確指導方式?
我是Google Cloud Spanner團隊的成員,我們中的一些人在此基於來自內部論壇的一些真實問題預先填充問題。 AFAICT,這是允許/鼓勵,但請告訴我們,如果這是一個問題。 –
這些是來自真實用戶的真實問題,問題和答案都是高質量的。這是一個很好的資源:) –