【问题标题】:How is the Subtype Discriminator used?如何使用子类型鉴别器?
【发布时间】:2012-06-16 04:28:33
【问题描述】:

假设我有一个包含许多子类型表的超类型表。我有兴趣使它们成为 disjoint 子类型,因为超类型表仅指向每行可能的子类型表之一。在网络上,我遇到了对 subtype discriminator 的描述,它是放入超类型表中的一个新列,它是一个小代码(通常是一个字符),用于标识该行属于哪个子类型。

我在实践中找不到任何实际示例。如果我在 C# 中工作,我想查询表的子类型鉴别器列,然后针对一些键->值列表([子类型鉴别器]->subtype_table_name)进行测试以创建正确的 SQL 以加入正确的表?

或者,SQL Server 中是否已经为此目的提供了一些视图/SQL 查询语法?

基本上,我想知道我必须在哪个级别实际执行逻辑才能使鉴别器有用。

【问题讨论】:

    标签: c# sql-server subtype discriminator supertype


    【解决方案1】:

    您的查询将包括以下内容:

    select *
    from Root
    left join Child1 on ... AND Root.Discriminator = 'C1'
    left join Child2 on ... AND Root.Discriminator = 'C2'
    

    并且希望 SQL Server 在开始从子表读取之前评估加法连接谓词。但这并不能保证。

    这种模式的好处在于它可以泛化到任意查询,即使是具有不同子类型的多行。

    【讨论】:

    • 谢谢,稍后我会试试你的答案。我将把问题留待一段时间,看看是否还有其他人有任何意见。
    • 我在 sql server 2005 中的一些虚拟数据库上试过这个。它似乎工作正常,但不完全确定你对不保证部分的意思。
    • 我正在就性能发表声明。我希望我发布的查询只能在运行时访问 Root 和相应的子项(与仅访问所有表相反)。
    • 知道了,谢谢。我真的很喜欢这个解决方案。不知道为什么所有关于鉴别器的文章都没有提到这种语法,或者只是假设它是常识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多