sql - 在关系数据库中存储矩阵

标签 sql database-design matrix-storage

我正在为客户开发一个项目并完成初始数据库设计。该项目将是一个简单的网络应用程序,用于在矩阵图中跟踪流程及其结果,我正在寻找一种将这些存储在关系表中的好方法。

现在我在想我有一个通用的例程表,x 和 y 坐标也将映射,并且可能从包含记录“命中”的坐标 ID 的查找表中脱离出来。有人有更好的方法吗?

谢谢!

编辑:

这只是项目的开始,所以到目前为止我的细节有限,但我背后的多个表的主要原因是因为矩阵的大小和通用性将是完全动态的,因此每个矩阵都可能不同并且它们将被绑定(bind)到用户

我还忘了提到 x/y 值的顺序很重要,这进一步支持了我在为 x y 和值设置多个表之后的推理,因此我强烈认为需要知道每个单独的单元格很重要

例子:

这方面的基本示例(尽管是抽象的)在于有关餐厅的过程。行为包括坐下、点菜、查看菜单、点饮料、吃饭、付款等。结果是点餐、送餐、送餐、找零。虽然看起来很简单,但如果考虑到每次发生的事情都不同,就变得复杂了,在外卖或自助餐的情况下也是如此。在看到情况之间的差异时,行动和结果的顺序变得不可或缺

最佳答案

有很多方法可以做到这一点,我们需要更多信息才能更具体地了解最适合您的方法。但是,这里有两种 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,如果您想单独查询/报告这些属性,请对它们进行索引。使用此型号也可以轻松改造此类功能。

  • 主要缺点是数据开销通常很大。许多人认为插入或检索新矩阵也有很高的开销,但实际上有几种记录在案的技术可以使其非常快。

    关于sql - 在关系数据库中存储矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2142566/

    相关文章:

    c++ - 运算符 + 在稀疏矩阵 : I don't find any bug

    sql - 如何将 Excel 单元格值设置为 Access Query 的条件?

    sql - 如何按 2 列 + id 选择组?

    mysql - 数据库 - 存储自定义变量 - 典型的wordpress数据库设计

    mysql - 实体-属性-值表设计

    java - 在数据库中存储表达式树

    c++ - 寻找一个C++开源的矩阵存储库

    sql - 如何解决 ORA-00937 : not a single-group group function when calculating percentage?

    sql - oracle 的超前和滞后功能的 Teradata 等价物