use*_*430 8 c# sql-server office365 asp.net-core asp.net-core-1.0
我想实现像SharePoint在线类似的东西,这就是列表功能.我想创建动态列表添加新列等.用户可以填写表单并保存数据.
瓶颈是数据库,我很难理解应该如何构建它.
我正在考虑创建动态SQL Server表,列等,但也许这不是一个好方法.有人可以建议数据库应该是什么样的吗?
我正在考虑创建一个名为的表Lists
,并存储List属性.然后与另一个表的多对多关系调用Fields
,我可以存储与特定表单相关的所有字段.多对多的关系因为某些字段对于所有形式都是通用的,例如:Id,CreatedBy,Created,Modified,ModifiedBy等.现在是困难的部分.我应该在哪里存储实际数据?我应该创建另一个名为FormData
并存储数据的表吗?Lists
和Fields
桌子有什么关系?
NoSql方法似乎很简单.如果您认为数据库仅作为IO设备(不应包含任何"业务"逻辑),内存成本和内存读/写时间(SSD)变低,那么您的出价将更少.
例如,您可以将字段的集合保存在一个对象中
{
"key": "form1",
"fields" : [ "Id", "CreatedAt" ]
}
Run Code Online (Sandbox Code Playgroud)
基于该对象,您可以使用列表或创建的字段形式生成视图.您可以为字段引入自己的"对象",以获得视图生成和数据处理所需的更多数据.
{
"key": "form1",
"fields" : [
{ "Name": "Id", "Type": "string" },
{ "Name" "CreatedAt", "Type": "DateTime" }
]
}
Run Code Online (Sandbox Code Playgroud)
实际数据也可以保存在一个对象中
{
"formKey": "form1",
"Name": "FirstName LastName",
"CreatedAt": "2017-04-23T18:25:43.511Z"
}
Run Code Online (Sandbox Code Playgroud)
在客户端,这些数据可以很容易地保存为json对象并发送到服务器.
在服务器端,您可以反序列化该对象,Dictionary<string, object>
并以动态方式处理它
var formEntity = JsonConvert.DeserializeObject<Dictionary<string, object>>(requestBody);
var name = formEntity["Name"].ToString();
Run Code Online (Sandbox Code Playgroud)
如果您紧密附加到关系数据库,则可以将"raw json"保存在NVARCHAR列和一个标识列中.
为了处理数据,您可以将其反序列化为Dictionary<string, object>
.
使用字段对象,{ "Name" "CreatedAt", "Type": "DateTime" }
您可以将值转换为期望的类型,以进行正确的验证和处理.
您将能够基于动态字段搜索数据并创建动态报告,用户可以在其中创建自己的报告.
由于字段结构不动态,您可以以关系方式保存表单和字段结构.以下是我对sql server数据库的建议.
CREATE TABLE Forms (
Id INT IDENTITY(1,1) NOT NULL
)
CREATE TABLE Field(
Id INT IDENTITY(1,1) NOT NULL,
Name NVARCHAR(30) NOT NULL,
TypeName NVARCHAR(30) NOT NULL, -- Or INT -> can represent SqlDbType enum in c#
)
-- many to many relation of Form and Fields
CREATE TABLE FormFields (
FormId INT NOT NULL,
FieldId INT NOT NULL,
PRIMARY KEY (FormId, FieldId)
)
-- because data is "dynamic" it should be saved as string (json format)
CREATE TABLE FormData(
Id INT IDENTITY(1,1) NOT NULL,
FormId INT NOT NULL,
Data NVARCHAR(MAX) NOT NULL, -- json format
)
Run Code Online (Sandbox Code Playgroud)
并考虑使用Microsoft版本的NoSql - DocumentDB
归档时间: |
|
查看次数: |
1991 次 |
最近记录: |