- PR -

連関エンティティについて

1
投稿者投稿内容
YMM
会議室デビュー日: 2007/04/15
投稿数: 15
投稿日時: 2007-07-03 00:12
お世話になっております。

サロゲートやIDをDB設計に取組むプロジェクトを最近になり、
よく目にします。中にも全てのテーブル等に対して、
サロゲートやIDを付与し、データアクセスコストを抑えたいと
考えているかたもいます。

サロゲートやIDの考え方は、全てのテーブルに利用するのではなく、
部分部分で、利用したほうがよいのではないかと思いました。
その理由としましては、連関エンティティに対して、
サロゲートやIDは場合によっては、必要がないかと思いました。

例えば、ユーザーテーブルと果物マスターテーブルがあり、それぞれに、
業務で利用するコードとシステムごとのIDまたはサロゲートが
設計されていたとします。

ユーザーテーブルと果物マスターに対して、関連エンティティである
ユーザー好物果物テーブルがあったとします。
ユーザー好物果物テーブルには、ユーザーIDと果物マスターIDしか
格納されておりません。
また、ユーザー好物果物テーブルがそれ単独で利用されることはありません。

皆さんは、関連エンティティに対してサロゲート or IDの付与は
どうされていますでしょうか?


1.状況によってサロゲートの導入。
2.なんでもかんでもサロゲートまたはID。
3.サロゲートの必要なし。

unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-07-04 18:08
引用:

YMMさんの書き込み (2007-07-03 00:12) より:
ユーザーテーブルと果物マスターに対して、関連エンティティである
ユーザー好物果物テーブルがあったとします。
ユーザー好物果物テーブルには、ユーザーIDと果物マスターIDしか
格納されておりません。
また、ユーザー好物果物テーブルがそれ単独で利用されることはありません。


「連関エンティティ」・「関連エンティティ」とは、いわゆる多対多テーブルのことですよね。

多対多テーブルの列定義を、

ユーザーID, 果物ID

の2つとするのか、

サロゲートキー, ユーザーID, 果物ID

の3つとするのか、という違いを問題とされているのでしょうか?
(あまり良く具体例が思い浮かびませんでした。)

サロゲートキーはなくてもあっても良い、という状況ならば、RDB としてはなくても良いのでしょう。
付けるのはあくまでも RDB にアクセスするためのツール(や RDBMS 自身)の都合によるものだろうと思います。
たとえば、O/R マッピングなどを使うときは、多対多であってもサロゲートキーを付けておかないと不便、というふうになりがちだと思います。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-07-04 18:22
実際何でも付けると、コードを書く人から不評だったりします。
それでも私は何でも付ける派ですね。

初めてまともに読んだDB設計に関する資料が
羽生章洋さんのものであったという影響ですね。
私の場合は明確な理由があるわけでなく、単なる好みです。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-07-04 18:49
引用:

unibonさんの書き込み (2007-07-04 18:08) より:
付けるのはあくまでも RDB にアクセスするためのツール(や RDBMS 自身)の都合によるものだろうと思います。
たとえば、O/R マッピングなどを使うときは、多対多であってもサロゲートキーを付けておかないと不便、というふうになりがちだと思います。



まさにツール次第と思います。

僕はJavaでEJB3.0でJPAなので、サロゲートは使いません。
素直にJPAを使うと、多対多のための「ジョインテーブル」は、あくまでもリレーションを表現するためのものであり、エンティティに対応するものにはなりません。(当たり前か)

Oracle Developerなんかも複合キーを難なくこなせますね。
1

スキルアップ/キャリアアップ(JOB@IT)