在数据库中存储动态生成的网格

时间:2018-01-18 09:34:27

标签: sql sql-server nosql

我在尝试提出在数据库中存储动态生成的网格的最佳方法时遇到了一些问题。我目前的情况是我有2个用户角色,为了简化我们只是称他们为管理员和客户。

管理员工作是创建需要由网站上的网格/表格中的客户填写的计划。我的问题是因为这些计划可能会有很大差异。不同的行数,不同的列数,不同的行名,不同的列名等。

我要考虑的另一件事是客户可以共享相同的计划,因此需要将计划存储为某个模板,以便能够在多个客户端之间共享。

我想出了几个选择:

  1. 制作一个'模板'桌子,一排'表格,以及'列'表。与模板的关系有很多行和行有很多列。然后,我可以根据行ID和列ID存储用户输入的数据。
  2. 使用模板集合和用户数据集合将数据存储在NoSQL数据库中。 (我的NoSQL经验非常少,我是.Net MSSQL dev,所以这个选项可能听起来完全愚蠢)
  3. 另一件事也是可能的,因为客户端正在填写他们的网格(可能会持续几周)我需要能够让管理员添加和删除列和行,如果他们忘记了某些东西或相信某些东西不再相关,它反映在客户方面。

    如果有人能指出我正确的方向,或者甚至告诉我,我的方法是可怕的错误,并提出更好的建议我会非常感激!

1 个答案:

答案 0 :(得分:1)

正如您在评论中要求我更详细地一样我会尝试。问题是,你的问题实际上不是 ...所以一些相当普遍的提示:

SQL Server将XML不是您看到的字符串,而是存储在分层组织的表中。在SQL级别处理这些数据需要一些技术诀窍,但表现非常出色。如果你在C#中努力工作,这不会打扰你......

从我正在运行的一个项目中,我可以向您展示一个示例:

这是工作数据

<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <YourGrid>
    <YourGridRow>
      <RowID>1227c0fe-cc33-416f-bb99-e03e66b907d4</RowID>
      <ShortText>YourGrid 1</ShortText>
      <Message>NotizBody1</Message>
      <DateFrom>2013-06-24T00:00:00</DateFrom>
      <DateTo>2013-06-25T00:00:00</DateTo>
    </YourGridRow>
    <YourGridRow>
      <RowID>3c0faf74-63d9-4b83-8858-972e7f3c643d</RowID>
      <ShortText>YourGrid 2</ShortText>
      <Message>NotizBody2</Message>
      <DateFrom>2013-06-24T00:00:00</DateFrom>
      <DateTo>2013-06-25T00:00:00</DateTo>
    </YourGridRow>
  </YourGrid>
</Data>

可以使用一行代码从C#DataSet创建相应的方案,并告诉引擎有关数据类型,可空性等的所有内容。

这样做,您可以定义不同的网格(甚至是多波段!)并将它们存储在Grid表中(与XML列GridSchema一起存储结构信息)。

工作数据位于表GridData中,FK指向相应的Grid和XML列Content

使用System.Data.DataSet,您可以先加载架构来定义数据集的内部结构,然后可以通过加载内容来填充它。将此数据集绑定到网格控件,并将更改的数据作为单个XML存储回内容列(或GridData中的新行,以保留旧数据的版本 - 如果需要)。

希望这会有所帮助......