2009-07-13 17 views
0
create table A (
    id int(10) not null, 
    val1 varchar(255), 
    primary key (id) 
); 

のアプローチ[A]:1対多の関係で代理キーが必要ですか?

create table B (
    a_id int(10) not null, 
    val2 varchar(255), 

    foreign key (a_id) references A(id) 
); 

のアプローチ[B]:[A]は、私がテーブルに "ID" 代理キーの作成を避けることができます選択することにより

create table B (
    id int(10) not null, 
    a_id int(10) not null, 
    val2 varchar(255), 

    foreign key (a_id) references A(id), 
    primary key (id) 
); 

B」 'モデリングの観点からテーブル 'B'を作成するための好ましいアプローチはどれですか?

+0

ここでは、1対多の関係をモデル化しようとしています。しかし、あなたの声明とは反対のオプション[a]であっても、私は 'A'の項目のために 'B'に複数の行を作成することができます。それで混乱? – Joe

答えて

0

私が理解しているとおり、[a]では1:1の関係を作成していますが、[b]ではそうではありません。 これは選択肢ではありません。

テーブルAが請求書を保持している場合、テーブルAはインボイスラインに使用できますが、[a]ではテーブルAのレコードごとに1つのレコードしか存在できないため、 1インボイスラインあたりのインボイスライン)

実際に答えが必要な場合は[b]を使用してください。あなたの[a]コンストラクトは1つのテーブルに置き換えることができます。 (また、あなたが1に主キー、FKと同じに設定されていなかったので、:1の関係)一般的には代理キーについて

+0

a_idがプライマリでも一意でもないので、これは真実ではないようです。どちらのソリューションも同じです。 [b]は、そのIDを使用してテーブルBのレコードを一意に識別することができます。 [a]では、val2の使用を除いて、単一のレコードを一意に識別することができないため、一意にする必要はありません。 –

+0

@malach、チップのおかげで。私は一意の主キーなしでテーブル 'B'の単一のレコードを変更することができないという事実を見落としたと思います。 – Joe

1

を、私のコンピュータサイエンスコースで

教授は「いいえ」と言います。

実践的な経験は、はい、そうです。

読みやすいSQL文のためだけにスペースを増やしたにもかかわらず、要件を変更した場合の柔軟性が増しています。

+0

それはここで問題ではありません。しかし、サロゲートキーの場合と同じように、それは増加したスペースとは関係ありません。 (私は彼らに敵対しているわけではない) – Peter

+0

スペースは、デザインの代理キーを提案するときに「いいえ」と言った准教授の大きな関心事ではなく、デザインの正しさ競合の問題。 – Extrakun

4

あなたは決して代理キー(それは名前です)が必要です。論理モデルと物理モデルを混在させているようです。あなたの論理モデルのために、あなたはおそらく、彼らが作るどこ物理モデルのために、あなたはサロゲートを紹介するかもしれない、

CREATE TABLE A (
    Val1 varchar() not null, 
    constraint PK_A KEY (Val1) --? 
) 

CREATE TABLE B (
    Val1 varchar() not null, 
    Val2 varchar() not null, 
    constraint PK_B KEY (Val2), --? or Val1,Val2? 
    constraint FK_A FOREIGN KEY (Val1) references A 
) 

(作らアップSQLで上記と同じですが、うまくいけば、あなたはポイントを参照してください)今

を持っているでしょうsense - 論理キーが長いところ(例:varchars)。しかし、あなたがそうしているかどうかは本当にあなた次第です。論理キーを強制的に実行することを忘れないでください。

+0

+1サロゲートキーとphyyicalモデルに言及します。論理設計では、代理キーを使用しないでください。 – gbn

関連する問題