有很多方法可以做到这一点,我们需要更多信息才能更具体地了解最适合您的方法。但是,这里有两种 SOP 方式:
每个矩阵都有一个单独的表:
CREATE TABLE YourMatrixName(
RowNo smallint NOT NULL,
ColNo smallint NOT NULL,
CellValue varchar](50) NULL,
CONSTRAINT [PK_Matrices] PRIMARY KEY CLUSTERED
([RowNo] ASC, [ColNo] ASC)
) ON [PRIMARY];
GO
CREATE UNIQUE NONCLUSTERED INDEX IX_YourMatrixName ON dbo.YourMatrixName
(ColNo, RowNo);
GO
或者,一张表中的所有矩阵:
CREATE TABLE Matrices(
MatrixName varchar(24) NOT NULL,
RowNo smallint NOT NULL,
ColNo smallint NOT NULL,
CellValue varchar(50) NULL,
CONSTRAINT [PK_Matrices] PRIMARY KEY CLUSTERED
([MatrixName] ASC, [RowNo] ASC, [ColNo] ASC)
) ON [PRIMARY];
GO
CREATE UNIQUE NONCLUSTERED INDEX IX_Matrices ON dbo.Matrices
(ColNo, RowNo);
GO
这些是标准的范式,几乎所有其他的方式都没有很好地规范化。这些方法的一些优点:
- 您不必填写每个单元格,只需填写您正在使用的单元格。或者有一个默认值(0 或“”)并跳过它们。
- 这很容易成为最灵活的方法,即使在“一体式”模型中,也无需以任何方式将它们限制为相同的大小,并且很容易调整它们的大小。
- 您可以轻松地查询矩阵的内容,这在更紧凑的存储方法中变得越来越困难。
- “命中”或矩阵单元的任何其他方面很容易实现为行中的附加字段。如果您担心额外的空间,请将它们设为 Null,如果您想单独查询/报告这些属性,请对它们进行索引。使用此型号也可以轻松改造此类功能。
主要缺点是数据开销通常很大。许多人认为插入或检索新矩阵也有很高的开销,但实际上有几种记录在案的技术可以使其非常快。