[Seasar-user:17203] Re: 2 多対一関連と dto への詰め込みについての質問
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2009年 4月 7日 (火) 17:00:41 JST
小林 (koichik) です.
Date: 7 Apr 2009 10:39:19 +0900
From: oriwa <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17195] 2 多対一関連と dto への詰め込みについての質問
> 例えば、下記の二つの表があったとき、
> create table users (
> user_id varchar(15) primary key,
> user_pass varchar(15) not null,
> user_name varchar(63)
> );
> create table role (
> user_id varchar(15) not null,
> user_role varchar(15) not null,
> PRIMARY KEY(user_id, user_role),
> FOREIGN KEY(user_id) REFERENCES users(user_id)
> );
> ---
> (1) ひとつのRoleに複数のuserが属するので、
そうなってはいませんね.
Role の主キーには user_id が含まれているので,
一つの Role は必ず一つの Users と関連します.
同じ user_role を持ち user_id が異なる複数の
Role が存在することは可能ですが,それらは別の
Role です (それを一つの Role としたいなら
中村さんが書いているように関連テーブルを
使うべきです).
逆に,同じ user_id を持ち,異なる user_role を
持つ Role が存在可能なので,一つの Users に
複数の Role が関連します.
よって,
> s2-jdbc-genでは、users<-OneToMany->roleとして生成されます。
> #Usersエンティティの方にroleListが作成される
となります.
> 外部キーが設定されている方がManyになるとの規則があるとのことですが、今回の場合は存在しないuser_idが登録されることを防ぐためにroleの方に外部キーを設定しました。
> このような場合、正しくrole<-OneToMany->usersとするためにはどのようにすればいいでしょうか?
ちょっと制約がよく分からないのですが,素直に
Users の方に外部キーを持たせるとこんな感じ.
create table users (
user_id varchar(15) primary key,
user_pass varchar(15) not null,
user_name varchar(63)
user_role varchar(15) not null,
FOREIGN KEY(user_role) REFERENCES role(user_role)
);
create table role (
user_role varchar(15) primary key
);
この Users は user_role を必須にしてます.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内