2

多くのサブタイプ テーブルを持つスーパータイプ テーブルがあるとします。スーパータイプ テーブルが行ごとに可能なサブタイプ テーブルの 1 つだけを指しているという点で、それらを互いに素なサブタイプにすることに興味があります。Webで、行が属するサブタイプを識別する小さなコード (通常は文字) であるスーパータイプ テーブルに入れられる新しい列であるサブタイプ ディスクリミネータの説明に出くわしました。

実際には、これの実際の例は見つかりませんでした。私が C# で作業していた場合、テーブルのサブタイプ識別子列をクエリしてから、いくつかのキー - >値リスト ([サブタイプ識別子] - > subtype_table_name) に対してテストして、正しいテーブルに参加するための適切な SQL を作成すると思いますか?

または、この目的のために SQL Server に既にいくつかのビュー/SQL クエリ構文がありますか?

基本的に、ディスクリミネーターを有効にするために実際にどのレベルでロジックを実行する必要があるのか​​ 疑問に思っています。

4

1 に答える 1

2

クエリは次のもので構成されます。

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

また、子テーブルからの読み取りを開始する前に、SQL Server が追加の結合述語を評価することを願っています。ただし、これは保証されません。

このパターンの良いところは、サブタイプが異なる複数の行に対しても、任意のクエリに一般化されていることです。

于 2012-06-15T20:20:04.580 に答える