假设我有一个包含许多子类型表的父类(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/