在SchemaPropertyTypes表中映射字段目的

时间:2017-02-01 15:16:31

标签: sensenet

我正在尝试Sense / Net社区版功能。

我成功定义并安装了名为“Vacation Request”的内容类型。

我想知道表格中“映射”字段的用途是什么:SchemaPropertyTypes

非常感谢,

1 个答案:

答案 0 :(得分:1)

我真的,真的希望你只是出于好奇而问这个,而不是因为你想在数据库中手动更改一些东西 - 因为不推荐:)。请始终通过 API 访问内容存储库,不要直接查询或修改数据库。

属性类型和值

简单属性值(如 int 短文本值)存储在 FlatProperties 表中。这是一个固定的表,包含专用于不同类型的预定义数量的列(例如,x个字符串列,y个int列 - 请参阅表中的列名称。)

属性定义存储在 SchemaPropertyTypes 表中,如您所知。

SchemaPropertyTypes表中从零开始的映射字段定义FlatProperties表中特定属性的列索引。例如。带有映射6的字符串属性的值将存储在FlatProperties表的'nvarchar_7'列中(注意索引被移一,因为列名索引是从一开始的。)

如果您查看 PropertyInfoView 视图(不是表格),可能有助于澄清这一点:视图的最后一列是一个计算列,显示您可以查找的列名称在平面属性表中。

(还有其他有用的SQL视图以更易读的方式显示数据)

属性'溢出'

可以注册更多相同类型的属性(例如int),而不能容纳FlatProperties表中的一行。解决方案:Sense / Net将这些节点存储在多行中 - 这就是为什么有一个Page列的原因。 尽管MS SQL Server在一段时间内支持大量列,但出于兼容性原因,这种设计仍然存在。

这就是为什么你看到PropertyInfoView中的映射值,如249,列名为nvarchar_10:值存储在第3页,这意味着内容占据了FlatProperties表中的3条记录。

'其他'属性类型

您可能已经注意到,在引用或长文本属性的情况下,没有映射。这是因为我们不将它们存储在FlatProperties表中,它们有自己的表,如 ReferenceProperties TextPropertiesNText