我认为这次我会变得灵活,让用户决定希望在他们的数据库中存储哪些联系信息。理论上,它看起来像一行包含,例如;姓名,地址,邮政编码,X类,Listitems A.
示例
FieldType 表定义用户可用的数据类型:
FieldTypeID, FieldTypeName, TableName
1,"Integer","tblContactInt"
2,"String50","tblContactStr50"
...
用户在 FieldDefinition 表中定义他的字段:
FieldDefinitionID, FieldTypeID, FieldDefinitionName
11,2,"Name"
12,2,"Address"
13,1,"Age"
最后,我们将实际的联系人数据存储在不同的表中,具体取决于其数据类型。 主表,仅包含ContactID
tblContact :
ContactID
21
22
tblContactStr50 :
ContactStr50ID,ContactID,FieldDefinitionID,ContactStr50Value
31,21,11,"Person A"
32,21,12,"Address of person A"
33,22,11,"Person B"
tblContactInt :
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
我已经研究过使用COALESCE和Temp表,想知道这是否可能。即使它是:也许我只会增加复杂性,同时牺牲性能以获得数据存储和用户定义选项的好处。
您怎么看?
答案 0 :(得分:1)
我认为这不是一个好方法,因为:
我个人认为最好采用不那么“通用”的方法。保持简单。
<强>更新强> 问题是,你真的需要这样灵活的解决方案吗?对于联系人数据,您始终希望能够存储至少一组核心字段(地址行1-n,名字,姓氏等)。如果您需要一种方法让用户在该标准数据集之上存储自定义/用户可定义数据,这是一个常见的要求。各种选择包括:
这些已经在此处讨论过,所以值得深入研究这个问题。但是,在看了之后似乎无法找到我记得的问题!
找到一些讨论键值方法的优点/缺点,以节省重复:
Key value pairs in relational database
Key/Value pairs in a database table