我一直在负责创建一个应用程序,允许用户将数据输入到将被保存并最终用于填充PDF表单域网络形式的能力。数据库模式的建议值
遇到麻烦试图想存储在数据库中的字段值的形式将是动态的好方法(基于PDF场)。
的应用程序本身我将围绕传递数据的哈希表(字段名,fieldValue方法),但我不知道该散列转换为分贝值的最佳方式。
我正在使用MS SQL Server 2000和asp.net webforms。有没有人有过类似的工作?
我一直在负责创建一个应用程序,允许用户将数据输入到将被保存并最终用于填充PDF表单域网络形式的能力。数据库模式的建议值
遇到麻烦试图想存储在数据库中的字段值的形式将是动态的好方法(基于PDF场)。
的应用程序本身我将围绕传递数据的哈希表(字段名,fieldValue方法),但我不知道该散列转换为分贝值的最佳方式。
我正在使用MS SQL Server 2000和asp.net webforms。有没有人有过类似的工作?
你有没有考虑过在这里使用文档数据库?这只是他们解决的问题,比传统的RDBMS解决方案好得多。就我个人而言,我是RavenDb的忠实粉丝。另一个相当不错的选择是CouchDb。我会避免使用MongoDb,因为它在当前的实现中确实不是数据安全的地方。
即使你不能使用文档数据库,就可以使SQL假装通过设置你的表有与有效载荷字段是序列化XML或JSON传统列的一些元数据是一个。这将允许您在EAV-land外出时搜索元数据。 EAV-land是一个可怕的地方。
UPDATE
我不知道,如果一个很好的指导存在,但概念是非常简单的。基本思想是将你想查询的部分分解成表格中的“普通”列 - 这可以让你以标准方式进行查询。当你找到你想要的记录时,你可以抓住CLOB并将其反序列化。你的情况,你会看起来像一个表:
SurveyAnswers
Id INT IDENTITY
FormId INT
SubmittedBy VARCHAR(255)
SubmittedAt DATETIME
FormData TEXT
几个protips:
一)使用基于文本的序列程序。给你一个解决数据错误的战斗机会,真正帮助调试。
b)对于SQL 2000,您可能需要考虑将CLOB(包含有效负载数据的TEXT字段)分解到单独的表中。自从我使用SQL 2000以来,它已经很长时间了,但是我的回忆是使用TEXT列对表格做了不好的事情。
我真的很喜欢这个想法。我希望将信息存储在json或xml中,但我对数据库存储非常有限。基本上坚持与MS SQL SERVER 2000.你能提供一些方向,我可以找到在列中使用元数据的文档? – pteranodonjohn
只是扩大了答案,我在基于Sql 2000的应用程序FWIW上非常成功地使用了它。 –
我建议镜像相同的结构:
Form
-----
form_id
User
created
FormField
-------
formField_id
form_id
name
value
为你所描述的所谓Entity Attribute Value(EAV),该模型可以是一个皇家疼痛处理解决方案。所以你应该尽可能地限制你对此的使用。
例如是否有字段几乎总是在形式(姓,名,电子邮件等),那么你应该把它们放在一个表作为字段。
这样做的原因是因为如果不这样做别人迟早会认识到,他们有这些名字和电子邮件,并要求你建立这个查询
SELECT
Fname.value fname,
LName.Value lname,
email.Value email,
....
FROM
form f
INNER JOIN formFields fname
ON f.FormId = ff.FormID
and AttributeName = 'fname'
INNER JOIN formFields lname
ON f.FormId = ff.FormID
and AttributeName = 'lname'
INNER JOIN formFields email
ON f.FormId = ff.FormID
and AttributeName = 'email'
....
时,你可以写这
SELECT
common.fname,
common.lname,
common.email,
....
FROM
form f
INNER JOIN common c
on f.FormId = c.FormId
而且只要你可以下车SQL 2000的,因为你要真的很怀念UNPIVOT
条款
它也p robably不是一个坏主意,看看以前的SO EAV questions给你一个人们遇到过的问题的想法
感谢您的输入,我一定会研究EAV。我希望我能够脱离SQL 2000,但是恐怕很长一段时间会让我留在那里。 – pteranodonjohn
也许你可以分享一些领域和与我们的关系。有时候,这实际上取决于目的,所以表格必须进行标准化,有时候,我们必须对表格进行非规范化处理(例如在仓储的某些情况下)!:) – Nonym
我仍处于设计的最初阶段,所以没有任何东西以任何方式完成。很可能,正如下面的gview所建议的那样,我将有一个Form表格,用于存储诸如表单类型,created_on等列......表单表格与FormField表具有一对多的关系,存储字段名称,类型和价值。 – pteranodonjohn
只是想补充说,这是一个保险后台办公类型的应用程序。字段值将保存诸如驾驶执照号码之类的信息以解决字段。 – pteranodonjohn