我正在为一组文档编辑器(电子表格编辑器、文本文档编辑器、PowerPoint 编辑器等)设计架构。编辑们将共享一个数据库,尽管他们有一天可能会使用不同的数据库。每个编辑器为每个文档共享许多通用信息,但是根据文档的类型,也有特定于编辑器的信息。
我的问题来自尝试设计每个编辑器都不同的架构部分。假设将有一个 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 关系的合理结构吗?是否有关于最佳实践的一种或另一种明确的指导?