SQL 2008:对每个数据类型使用单独的表来返回单行
我想这次我会灵活一些,让用户决定希望在他们的数据库中存储什么联系信息。理论上,它看起来像一行,包含,例如;姓名、地址、邮编、类别X、列表项A 示例SQL 2008:对每个数据类型使用单独的表来返回单行,sql,tsql,rows,coalesce,Sql,Tsql,Rows,Coalesce,我想这次我会灵活一些,让用户决定希望在他们的数据库中存储什么联系信息。理论上,它看起来像一行,包含,例如;姓名、地址、邮编、类别X、列表项A 示例 定义用户可用数据类型的FieldType表: FieldTypeID, FieldTypeName, TableName 1,"Integer","tblContactInt" 2,"String50","tblContactStr50" ... 用户可在FieldDefinition表中定义其字段: 最后,我们根据其数据类型将实际联系人数据存储在
定义用户可用数据类型的FieldType表:
FieldTypeID, FieldTypeName, TableName
1,"Integer","tblContactInt"
2,"String50","tblContactStr50"
...
用户可在FieldDefinition表中定义其字段:
最后,我们根据其数据类型将实际联系人数据存储在单独的表中。
主表,仅包含ContactID
TBL联系人:
tblContactStr50:
TBL联系人:
问题:是否可以将这些表的内容分成两行返回,如下所示:
ContactID,Name,Address,Age
21,"Person A","Address of person A",NULL
22,"Person B",NULL,27
我已经研究过使用COALESCE和Temp表,想知道这是否可能。即使是这样:也许我只是为了数据存储和用户定义选项的好处而增加了复杂性,同时牺牲了性能
你觉得怎么样?我认为这不是一个好办法,因为:
- 一个触点的1条记录的简单插入突然变成n条插入。e、 g.如果您为联系人存储varchar、nvarchar、int、bit、datetime、smallint和tinyint数据,则在数据类型特定的表中有7个插入,主标题记录为+1
- 同样,一个查询将自动引用7个表,其中涉及6个联接,以获取完整的详细信息
- 用于存储所有用户定义数据的主联系人表中的XML列
- 1个额外的表,包含键值对数据,有点像您最初提到的,但程度要小得多!这将包含联系人的键、自定义数据项名称和值
嗨,A,我倾向于像你建议的那样保持简单。我对这个问题的复杂性感到有点害怕。如果有人以前没有这样做过,那一定有原因。@Thomas C-Yep,你的直觉是对的。如果你发现自己有这种感觉,这是一个很好的迹象,你应该重新思考你到底想要实现什么。现在我的直觉告诉我,稀疏列是一种方式;)谢谢,我现在很乐意做出正确的设计决策。祝你度过愉快的一天,并向托马斯致意
ContactID
21
22
ContactStr50ID,ContactID,FieldDefinitionID,ContactStr50Value
31,21,11,"Person A"
32,21,12,"Address of person A"
33,22,11,"Person B"
ContactIntID,ContactID,FieldDefinitionID,ContactIntValue
41,22,13,27
ContactID,Name,Address,Age
21,"Person A","Address of person A",NULL
22,"Person B",NULL,27