C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DBのテーブル設計で、複合キーを使うか否か


(過去ログ 41 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■21230 / inTopicNo.1)  DBのテーブル設計で、複合キーを使うか否か
  
□投稿者/ nbmyou (10回)-(2008/06/27(Fri) 14:03:56)

分類:[設計/仕様] 

お世話になっております。
nbmyouと申します。

テーブルの設計をする際、
2個以上のカラムでユニークになるテーブルとなった場合、
みなさんは、下記のどの方法をとりますでしょうか?
++++++++++++++++++++++++
1.複数のカラムを主キーとする(複合キー)
2.シーケンスで連番を振る「ID」カラムを用意し、それを主キーとする(人工キー)
3.その他の方法
++++++++++++++++++++++++

最近、途中から参加しはじめた開発プロジェクトのDB設計を見たところ、
複合キーが多用されていました。(6カラムで主キーを構成するなど)
初めてDBを勉強した際に「できるだけ人工キーを使うべき」と聞いていたため、
違和感を覚え、質問させていただきました。

理由も含めてお答えいただければ、とても参考となるので、
よろしれば教えてください!よろしくお願いします。

(ちなみに、「複合キーはあまり使うべきではない」と聞いていた理由は
 『インデックスが増えすぎて重くなるから』だったと思うのですが、
 そのような経験をされた方はいらっしゃいますか?)
引用返信 編集キー/
■21231 / inTopicNo.2)  Re[1]: DBのテーブル設計で、複合キーを使うか否か
□投稿者/ nakaP (15回)-(2008/06/27(Fri) 15:56:10)
こんにちは。
こちらが参考になるかと思います。
http://blogs.wankuma.com/ognac/archive/2006/11/27/47250.aspx

僕は複合キーよりサロゲートキー(人工キー)のほうがメリットが大きいと思います。
引用返信 編集キー/
■21240 / inTopicNo.3)  Re[1]: DBのテーブル設計で、複合キーを使うか否か
□投稿者/ はつね (802回)-(2008/06/27(Fri) 18:12:50)
はつね さんの Web サイト
No21230 (nbmyou さん) に返信
> ++++++++++++++++++++++++
> 1.複数のカラムを主キーとする(複合キー)
> 2.シーケンスで連番を振る「ID」カラムを用意し、それを主キーとする(人工キー)
> 3.その他の方法
> ++++++++++++++++++++++++
>
> 最近、途中から参加しはじめた開発プロジェクトのDB設計を見たところ、
> 複合キーが多用されていました。(6カラムで主キーを構成するなど)
> 初めてDBを勉強した際に「できるだけ人工キーを使うべき」と聞いていたため、
> 違和感を覚え、質問させていただきました。

一概にはどれがいいとはいい切れません。
・人口キーの場合、その連番をどう管理するか
・複合キーの項目で検索するのであれば、人口キー分が余計になるのではないか
・主キーに相当する複合キーが将来的に変わるようなことはないか
・外部参照制約を考えたときに、人口キーは適切か
    :

単純に「できるだけ人口キーを使うべき」のような「べき」論で済んでしまうよう
な簡単な話ではなく、色々検討が必要であると考えます。
よって、複合キーに違和感を覚えるのであれば、一時的に複合キー擁護派に思考を
チェンジしてどのような利点や特性、欠点があるかを別の立場で考えるなどして、
今の思考方向とバランスをとってみても良いかと思えます。

引用返信 編集キー/
■21308 / inTopicNo.4)  Re[2]: DBのテーブル設計で、複合キーを使うか否か
□投稿者/ 夏椰 (1回)-(2008/06/30(Mon) 16:45:28)
No21240 (はつね さん) に返信
> 一概にはどれがいいとはいい切れません。
> ・人口キーの場合、その連番をどう管理するか
> ・複合キーの項目で検索するのであれば、人口キー分が余計になるのではないか
> ・主キーに相当する複合キーが将来的に変わるようなことはないか
> ・外部参照制約を考えたときに、人口キーは適切か
>     :
>
> 単純に「できるだけ人口キーを使うべき」のような「べき」論で済んでしまうよう
> な簡単な話ではなく、色々検討が必要であると考えます。
> よって、複合キーに違和感を覚えるのであれば、一時的に複合キー擁護派に思考を
> チェンジしてどのような利点や特性、欠点があるかを別の立場で考えるなどして、
> 今の思考方向とバランスをとってみても良いかと思えます。
>

おいらもはつねさんと同意見です。
人工キーにしても
・それをどう管理するか、
・どれぐらいの桁数が必要なのか(これ失敗したらきっと痛い)
などいろいろ考えなければなりません。

複合キー/人工キーの利点・欠点を加味した上で、決定していくものと考えています。
引用返信 編集キー/
■21324 / inTopicNo.5)  Re[2]: DBのテーブル設計で、複合キーを使うか否か
□投稿者/ nakaP (17回)-(2008/06/30(Mon) 23:33:01)
僕はなにか、「複合キー」と「ナチュラルキー」を勘違いしてたようです。

僕自身、まだ考えはまとまっていませんが、複合キーという選択もありだと思います。
引用返信 編集キー/
■21329 / inTopicNo.6)  Re[3]: DBのテーブル設計で、複合キーを使うか否か
□投稿者/ やじゅ (465回)-(2008/07/01(Tue) 06:04:22)
やじゅ さんの Web サイト
>■No21324 (nakaP さん) に返信
> 僕はなにか、「複合キー」と「ナチュラルキー」を勘違いしてたようです。

複合キーの対義語は単一キー
人口キー(サロゲートキー)の対義語は自然キー(ナチュラルキー)

自然キーは複合キーになりやすいので、複合キー≒自然キーとして
読み取ってますけどね

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -