【恐怖】主キーがないテーブルみたことありますか?

このエントリーをはてなブックマークに追加
935NAME IS NULL:2011/07/30(土) 13:02:19.71 ID:???
>>934
一般的には付けたほうがいい。
HACKしたわけではないけど列指向データベースとかは余り有益ではないかも。
936NAME IS NULL:2011/08/21(日) 14:12:10.62 ID:???
DB初心者です。
今、改修してるシステムのDBは9割以上のテーブルに主キーが設定されていません。
その代わり、全てのテーブルにインデックスは設定されています。
これは主キーを設定してもしなくても同じなのでしょうか。
937NAME IS NULL:2011/08/21(日) 18:05:16.45 ID:???
これ次スレ必要なんかしら
938NAME IS NULL:2011/08/21(日) 20:42:39.03 ID:22rNpbGh
>>936
同じではないけど、問題ないなら主キーの設定はしなくてもいい。
そもそも、主キーの設定は必須ではないからね。
939NAME IS NULL:2011/08/21(日) 21:35:44.80 ID:???
インデックスってのが、ユニークインデックスなら、実用上問題は少ない
ほとんどのDBMS実装では、主キー=Not NULL制約+ユニークインデックスだと思っていいかと

ユニークでないインデックスなら、そのテーブルは行を特定できない可能性がある
それで問題ないなら主キーなくてもいいんじゃね
940NAME IS NULL:2011/09/08(木) 18:24:23.93 ID:???
>>1
全カラムでユニークであることは維持しないと。
完全に重複してるデータがどんどん入ってしまうと、さすがに後の処理が厄介だね。
データ設計段階で冗長なカラムを付加してでも主キーを設定してデータベースシステムに任せるか、
すべてプログラム側で一意性を維持させるかということかな。

941NAME IS NULL:2011/09/13(火) 16:34:44.58 ID:YBAEI4zg
主キーはあるが、参照制約は全く無い
単なるインデックス+UNIQUE+NOT NULL制約のためだけに使ってる感じ

そういうのって、どうなんだろう
942NAME IS NULL:2011/09/13(火) 19:04:50.73 ID:???
ari
943NAME IS NULL:2011/09/14(水) 00:01:37.44 ID:???
>>941
汎用的なスキーマにするにはそうせざるを得ないな。
ERPとかそうなってるだろ。
無論論理設計段階で要件がかちっと決められる場合はそうではないけど、
ソーシャルとかで大量のクエリを捌かないとならないばあいはあえて参照整合性は付けないかな。遅いから。

944NAME IS NULL:2011/09/14(水) 01:12:47.01 ID:???
参照制約も、参照先テーブルと参照元テーブルを、何がしらかの拡張系JOINを使って
結合すると、ON句を指定しないでもその参照制約を用いての自然な外部結合結果を
返してくれる、みたいなメリットがあったら、もっとみんな使うんじゃないのかなぁ、とか
妄想することがあるんだが、そういう実装ってあるのかな?
945NAME IS NULL:2011/09/14(水) 01:36:56.36 ID:???
MSACCESS
946NAME IS NULL:2011/09/15(木) 13:20:39.23 ID:???
tablename_pkey ってインデックス名だからプライマリキーだと思ったら単なるunique indexだった……
947NAME IS NULL:2011/09/21(水) 14:54:55.64 ID:???
プライマリキーが複数(組)設定されてるTBLを
見たことがある人は手をあげて
948NAME IS NULL:2011/09/21(水) 15:30:00.08 ID:???
Alternative Keyなら設定すっぞ
インデックス名をPK_<TABLENAME>_1とかしたら
一瞬頭をひねるだろう。
フハハハ
949NAME IS NULL:2011/09/21(水) 17:09:25.64 ID:???
>>947
Oracleでは設定できんのだが、できる実装があるのか?
950NAME IS NULL:2011/10/12(水) 19:56:15.22 ID:???
Oracleでも出来ますよ

CONSTRAINT <TABLE名> PRIMARY KEY (<KEY1>,<KEY2>,...) USING INDEX
951NAME IS NULL:2011/10/12(水) 19:58:18.98 ID:???
○<制約名>
×<TABLE名>
952NAME IS NULL:2011/10/12(水) 21:19:50.02 ID:???
それは単に、複数列によるプライマリキーってことなのでは
953NAME IS NULL:2011/10/12(水) 22:00:40.10 ID:???
DB初心者で馬鹿な俺に教えてくれ

PKとは唯一無二のカラム(例えば顧客マスタの「顧客コード」)で、
所謂複数列によるPKとやらはユニークキーという認識で合っているのか?
954NAME IS NULL:2011/10/12(水) 22:32:47.19 ID:???
>>953
RDBに限っていうと、列が単一でも、複数でもキー候補となりうる。
列またはその集合(複数の列)を指定するとテーブルの中の組を
一意に識別できるならばその列またはその集合はキー候補です。
キー候補のうちで、任意のものをプライマリーキーに指定できます。
任意のものだから、どれでもよい。
プライマリーキーは多くの場合、テーブル生成時に指定することが
許されているので特別な何かと思いがちですが、データベースシステムが
常にプライマリーキーの存在に注意して動作してくれるという点を除けば
論理的には他のキー候補と何等差はありません。
955NAME IS NULL:2011/10/13(木) 06:54:27.19 ID:???
>>954
教科書的な答えなら、このスレの >>1 - >>150 くらいの中で出尽くしてる
のではないか。プライマリーキーに関する議論としては、ウェブやブログでは
ほとんど見つけることのできない情報源になっていると思う。
956NAME IS NULL:2011/10/14(金) 20:40:04.71 ID:???
>>944
キャシエ
957NAME IS NULL:2011/11/23(水) 01:47:14.60 ID:???
仕事でよく新規テーブルを作るんだが、
レコード数が1年で1万行程度だったら主キーとかインデックスとかつけないな。
理由は考えるのがめんどくせーから。

シンプルに、よりシンプルに!がモットーです。
958NAME IS NULL:2011/11/23(水) 12:55:37.48 ID:???
主キーはつけないと後で泣き見るぞ
959NAME IS NULL:2011/11/23(水) 15:20:08.35 ID:???
主キー無しで数千万レコードもあるトランザクションテーブルの面倒見ているから、主キー無しの酷さはよく知っている。
全く同じ行が複数ヒットするんだが、別々の注文なのか、1つの注文が不具合で2行になったのか。
インサート日は時間まで無くて困る。
960NAME IS NULL:2011/11/23(水) 23:34:14.47 ID:???
>>957が設計してそれを>>959が保守していると....
961NAME IS NULL:2011/11/23(水) 23:35:18.86 ID:???
カワイソス
962NAME IS NULL:2011/11/24(木) 08:00:38.45 ID:???
>>960
数千年・・・
963NAME IS NULL:2011/11/25(金) 04:36:40.14 ID:???
用途による
964NAME IS NULL:2011/12/02(金) 21:45:52.90 ID:kohrfEHA
つけといて困ることはないけど
つけとかないと困る
965NAME IS NULL:2011/12/03(土) 06:32:22.42 ID:???
>>964
必要のない **ID といった項目が無闇と多くなる。
966NAME IS NULL:2011/12/03(土) 07:02:20.99 ID:???
それはサロゲートキーといいます
967NAME IS NULL:2011/12/04(日) 17:32:35.30 ID:???
UUIDでもいいから主キーはつけておいてくれ。
968NAME IS NULL:2011/12/04(日) 19:03:07.68 ID:???
その目的は?
969NAME IS NULL:2011/12/05(月) 07:52:19.83 ID:???
ないと行が特定できない可能性があるからだろ
970NAME IS NULL:2011/12/05(月) 19:21:50.51 ID:???
サロゲートキーに意味はないんだから行は特定できないでしょ
っていんたいんだろう
971NAME IS NULL:2011/12/05(月) 22:39:00.10 ID:???
特定できりゃ何でもいいってわけじゃないからねぇ。
設計中に全フィールド足しても主キーにならないテーブルなんてものが出てきてしまったら普通は
設計あるいはモデリングの失敗だから、そこで立ち返って検討しなおすべきであって、勝手なキーを
くっつけて「主キーができたから大丈夫」なんて済ませるべきじゃないってことだろう。
例えば>>959の例で、このテーブルに何かユニークなキーを追加したところでほとんど何の
解決にもならんし。
972NAME IS NULL:2011/12/07(水) 22:00:19.82 ID:???
特定の1行を削除できなくなるからだろ
(サロゲートキーのどの行でもいいけど、とにかくそのデータから1行だけ消したいって場合もある)
973NAME IS NULL:2011/12/07(水) 23:14:12.91 ID:???
あー、ホスト移行とかDWH系のテーブルはGUIツールとかでポチッと消せなくて面倒くさいときがあるな
974NAME IS NULL:2011/12/07(水) 23:16:15.62 ID:???
同じレコードが何件存在するかが情報として必要な場合?
そういうのは明示的に件数を持とうよ。
975NAME IS NULL:2011/12/07(水) 23:27:45.89 ID:???
結論
DB設計をしっかりやればおk
それを適当にやってたらクズ
976NAME IS NULL:2011/12/07(水) 23:55:18.93 ID:???
>>973
俺DWHの開発してたことあるけどネティーザって主キー設定しても
実際には主キーが効かないっていうイミフな仕組みだったな
データ突っ込むときに自分で気をつけろってマヌアルに書いてあった

あれは二度とやりたくない
977NAME IS NULL:2011/12/12(月) 23:26:01.17 ID:???
データがどう入るか分からんから
リーダーに主キーを消されたことあったな。

そのどうデータが入るかわからないテーブルで
バグ出したら、こっちの責任になるんだが。。
978NAME IS NULL:2011/12/13(火) 05:11:19.30 ID:???
どう入るか判らんから制約つけるのに馬鹿みたい
979NAME IS NULL:2011/12/13(火) 06:03:07.92 ID:???
>>978
最初に集合ありき。それを見つめて制約がでてくる。
そういう帰納論理的な考え方も魅力はあるよ。
980NAME IS NULL:2011/12/13(火) 22:10:14.24 ID:???
どういうデータが来るかとどういうデータを入れるべきかは区別して考えないとな。
981NAME IS NULL:2011/12/16(金) 02:18:31.93 ID:???
キリッ、を忘れてるな
982NAME IS NULL:2011/12/16(金) 07:59:53.30 ID:???
朝のダイニングは少し広々としていた.
彼女はいつもきちんとしていて,忘れ物などあろうはずもない.
ただ微かな残り香だけがのこっていた.

朝食の用意をしよう.
一人分だからといきなりの手抜きは,なんだかあのひとに申し訳ないように思えた.
いつものメニューでいこう.

ふと食卓の紙片に目がいった.小ぶりの花瓶に隠れるように置いてある紙片を
取り上げたとたんに抑えていた涙がこぼれる.

一言「すき」とだけ書いたあのひとは一体,どんな思いでこれを書いたのだろう.
紙片を握りしめ,もういちど視線をもどすとそこにはいつものテーブル.
もうそこに「すき」と書いた紙片はない.「すき」はもうテーブルにないのだ.
シュキーのないテーブルとはまさにこのことだ.デービーってほんとに素晴らしいものですね.
983NAME IS NULL:2011/12/16(金) 09:59:34.65 ID:???
ちょっとワロタ
984NAME IS NULL
三流だな