【问题标题】:Avoid parsing xml fields in the database避免解析数据库中的xml字段
【发布时间】:2012-02-22 12:59:39
【问题描述】:

我将 XAF(DevExpress 框架)用于我的第一个应用程序(它是一个 CMS)。有一个调度程序组件。 并且,它节省了像xml这样的事件的重复发生。例如:

<RecurrenceInfo Start="02/21/2012 09:00:00" End="02/28/2012 11:30:00" Id="e8507496-2be9-4bde-90a6-9eeea98fdc5a" Range="2" />

这是 Range 枚举(但还有其他一些枚举存在):

public enum RecurrenceRange {
        NoEndDate,
        OccurrenceCount,
        EndByDate
    }

另外,我还有另一个应用程序(ASP.NET MVC)。我需要选择特定日期或期间的事件(今天、明天、当月等)。

表中的问题将是 10000 条(例如)记录,然后我需要解析所有记录以查找请求日期的事件。我认为这是降低性能。

你看到了什么解决方案?

我想执行以下操作:创建事件时(在 CMS 中),然后在表中添加一些持久字段并以编程方式填充它们。

如何更好地创建用于存储这些数据的字段?

还有一个问题。 例如,事件将在一周中的 5 点和 8 点进行。调度器会在表中创建两条记录:

id      EventName      RecurrenceInfo      Description        //otherfields
1        event1            xml1            description1
2        event1            xml2            description1

Scheduler 多创建一条记录,除 RecurrenceInfo 以外的所有字段都等于的问题。 我想再创建一个 id 列并为所有重复记录分配相同的值。

谢谢,对不起我的英语。

【问题讨论】:

    标签: c# sql-server asp.net-mvc architecture devexpress


    【解决方案1】:

    您可以创建Xml typed column 并使用以下查询

    select
      (list of fields)
    from
      MyTable
    where
      MyXmlField.value('(/root[Start])', 'datetime') > '01.01.2001'
    

    【讨论】:

    • RecurrenceInfo 字段的类型是nvarchar,无法更改。
    • 您可以添加 drigger,并将 xml 放入另一个带有 XML 列的表中,或者解析 XML 并放入带有 Start End datetime 列的表中
    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多