[seasar-dotnet:1414] Re: 同一テーブルを複数回にわたって結合する

Tatsuya Yakuwa [E-MAIL ADDRESS DELETED]
2009年 7月 31日 (金) 16:00:26 JST


久保様、ご回答ありがとうございます。

同一テーブルを複数回という点に関しては、
外部キーを複数作成することで理解いたしました。


> 具体的にどういった要件だったのか教えて頂けますでしょうか?
> ぜひ参考にしたいと思いますので、差し支えの無い範囲でいいので。
例えば、会員の階級を表すコードで、
運用後に追加変更できるようにしたい場合です。

会員情報照会画面等では、階級の名称を表示するために
テーブル区分値(classificationDefinitionMap)を使用することを考えていたのですが、
変更の度に、DLLを差し替える必要があるため、
運用に耐えられないということです。



ここからは、おって確認なのですが。
テーブル構造そのものに関わってしまうようであれなのですが、

/*
 FROM Pre_Member_Info M
   left outer join dbo.Com_Code C1
   on (C1.codesb_cd = '0008'
                 and C1.code_val = gender_cd)
   left outer join dbo.Com_Code C2
   on (C2.codesb_cd='0026'
                 and C2.code_val = post_cd )
*/
のように、Com_CodeのPKは(codesb_cd(コード種別),code_val(コード値))の複合キーになっており、
複数のコードを種別ごとに、コード値と名称などを管理するマスタになっています。

対して、Pre_Member_Info側では、gender_cd(性別),post_cd(階級)のように、
コード値に対応するのみのカラムしかありません。

この場合、外部キーを定義するには、Pre_Member_Info側にコード種別に対応するカラムを、
コード毎に追加する必要がでてきます。
(もしくは、複合でない一意のキーになる共通のカラムを追加する)
例えば、
/*
CREATE TABLE [dbo].[Pre_Member_Info](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[member_No] [nchar](10) NULL,
	[birth_dt] [datetime] NULL,
	[gender_sb] [nchar](10) NULL,
	[gender_cd] [nchar](10) NULL,
	[post_sb] [nchar](10) NULL,
	[post_cd] [nchar](10) NULL,
*/
現状は、これで対応しているのですが。。。

DbFluteでは、先述のON句のように定数を渡して結合のようなことを
実装する手段は、ありますでしょうか??


以上です。
よろしくお願いします。


On Thu, 30 Jul 2009 21:24:35 +0900, kubo <[E-MAIL ADDRESS DELETED]> wrote:

> 久保(jflute)です。
>
> 八鍬さん、こんばんは
>
>> 一つのテーブルに対して、同一テーブルを複数回にわたって
> こちらの意味の確認ですが、
> 例えば、
> 「会員」テーブルと「会員ステータス」テーブルがあったとして、
> 「会員」テーブルに「現在会員ステータスコード」と
> 「前回会員ステータスコード」というカラムがあって、
> それぞれのコード経由で「会員ステータス」を取得したい
> ということでよろしいでしょうか?
> (一つのテーブルから同じテーブルに対して複数のFKがある)
>
> MemberCB cb = new MemberCB();
> cb.setupSelect_MemberStatusBy現在();
> cb.setupSelect_MemberStatusBy前回();
> ...
>
> Member member = memberBhv.selectEntity(cb);
> ... = member.getMemberStatusBy現在();
> ... = member.getMemberStatusBy前回();
>
> この場合FK制約が貼られていれば、上記の例のように
> 「テーブル名Byカラム名」という識別子でそれぞれの
> リレーション毎にメソッドが作成され、それぞれ別個に
> 扱うことができます。
>
> なので、FK制約が貼られていればそういったメソッドが
> 生成されているはずです。
>
>> classificationDefinitionMapを使用することも検討したのですが、
>> エンドユーザが保守できる要件をみたせなくなってしまうため、
>> 見送った経緯があります。
> 具体的にどういった要件だったのか教えて頂けますでしょうか?
> ぜひ参考にしたいと思いますので、差し支えの無い範囲でいいので。
>
> 2009/7/30 Tatsuya Yakuwa <[E-MAIL ADDRESS DELETED]>:
>> お世話になっております。
>> 八鍬(やくわ)と申します。
>>
>> DbFluteのConditionBeanについて、おたずねしたいのですが。。。
>>
>> 外出しSQLを使用せず、ConditionBeanで
>> 1つのテーブルに対して、同一テーブルを複数回にわたって
>> 、結合することは可能でしょうか?
>>
>> 例えば、名称マスタや区分マスタなどのコード→名称のようなテーブルから、
>> 名称を取得するようなケースです。
>>
>> http://dbflute.sandbox.seasar.org/contents/condition-bean/basic.html
>> のDBFluteBasicExampleを参考にしていたのですが、
>> 同じようなケースが見当たらなかったので。。。
>>
>>
>> --
>> /*
>> SELECT M.kojinID
>> ,M.member_no
>> ,M.section_cd
>> ,M.gender_cd
>>  ,C1.code_nm as gender_nm
>> ,M.post_cd
>>  ,C2.code_nm as post_nm
>>  FROM Pre_Member_Info M
>>  left outer join dbo.Com_Code C1
>>  on (C1.codesb_cd = '0008'
>>                and C1.code_val = gender_cd)
>>  left outer join dbo.Com_Code C2
>>  on (C2.code_val = post_cd
>>                and C2.codesb_cd='0026' )
>> */
>> もしくは
>> --
>> /*
>> SELECT kojinID
>> ,member_no
>> ,section_cd
>>  ,(select code_nm
>>      from dbo.Com_Code
>>      where codesb_cd='0008'
>>      and code_val = gender_cd ) as gender_nm
>>  ,(select code_nm
>>      from dbo.Com_Code
>>      where codesb_cd='0026'
>>      and code_val = post_cd ) as post_nm
>>
>>  FROM Pre_Member_Info
>>
>> */
>>
>> のようなSQLです。
>>
>> ちなみに、
>> classificationDefinitionMapを使用することも検討したのですが、
>> エンドユーザが保守できる要件をみたせなくなってしまうため、
>> 見送った経緯があります。
>>
>>
>> 以上よろしくお願いいたします。
>> --
>> *----**===**----**===**----**===**----**===**----*
>>  株式会社 エム・エス・アイ
>>  システム部 八鍬 達也
>>  Add:山形市松栄1-5-7
>>  Tel:023-647-3966 Fax:023-647-3967
>>  E-mail:[E-MAIL ADDRESS DELETED]
>>  ☆ ★ ☆    社員ブログ更新中!!!    ☆ ★ ☆
>>  http://www.msi-net.co.jp/blog/index.html
>> *----**===**----**===**----**===**----**===**----*
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
> __________ Information from ESET NOD32 Antivirus, version of virus  
> signature database 4292 (20090730) __________
>
> The message was checked by ESET NOD32 Antivirus.
>
> http://www.eset.com
>
>
>
--
八鍬 達也


seasar-dotnet メーリングリストの案内