c# - 如何使用子类型鉴别器?

标签 c# sql-server subtype discriminator supertype

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

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

或者,SQL Server 中是否已有一些用于此目的的 View /SQL 查询语法?

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

最佳答案

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

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

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

此模式的优点在于它可以推广到任意查询,即使对于具有不同子类型的多行也是如此。

关于c# - 如何使用子类型鉴别器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11057571/

相关文章:

sql-server - 如何使用 SQL 查询在 SQL Server 2008 R2 中获取用户定义的类型定义?

python - 如何使用 python 将数据框值及其标题转换为列表?

module - OCaml 中的子类型和模块包含

java - 默认情况下使用 Jackson 解析为子类

c# - string.split 返回一个 string[] 我想要一个 List<string> 是否有一个衬垫可以将数组转换为列表?

c# - 传递枚举命令行参数

c# - 如何捕获在 Entity Framework 4 触发的触发器中调用的 RAISERROR 抛出的 SqlException?

c# - "Both use the XML type name X, use XML attributes to specify a unique XML name and/or namespace for the type"怎么解决?

sql-server - 如何在移动报表发布器中创建 SQL Server 连接

flutter - 如何检查一个类型是否是 dart 中另一个类型的子类型