私はDB / Hibernateを初めて使用し、コードを見つけました:
@SequenceGenerator(name = "entSeq"、allocationSize = 5、sequenceName = "CODE_SEQ") ... @ID @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entSeq")
主キーのシーケンスを設定します。
主キーの値にシーケンスが使用されたのはなぜですか? どの目標に取り組んだか:
- パフォーマンスを向上させる
- 制約を追加、いくつかのチェック
- ID の整数値の可能な値の範囲を制限します。なぜそうするのですか??
- なぜ1から数え始めるのですか?
私は構文と使用法について読んだ:
- http://msdn.microsoft.com/en-us/library/ff878091.aspx
- http://www.techonthenet.com/oracle/sequences.php
しかし、私の質問に対する答えが見つかりません。
アップデート:
私は読んで楽しんだ:
- http://www.oracle.com/technetwork/products/rdb/0307-sequences-130053.pdf SQL の使用ガイド: シーケンス番号ジェネレータ
主キーの一意の ID を取得する方法が DB 理論に問題があることを示しています。つまり、自分の主キーの値を提供せずにテーブルに挿入できるということです。
INSERT INTO サプライヤー (supplier_id、supplier_name) 値 (supplier_seq.nextval, 'クラフト食品');
しかし、この機能は、主キーの値を強制的に提供することなく、すべての DB に存在する必要があると思います...
私は正しいと思いますか?
更新 2:
START WITHを使用する理由の答え:
この句は、既存のデータベースにシーケンスを追加するときに役立ちます。古いスキームがアプリケーションで使用されていて、すでに有効な範囲からいくつかの値を消費している場合、この句を使用してそれらの消費された値をスキップできます。MINVALUE と MAXVALUE は有効な範囲を指定するために使用されますが、START WITH はその範囲内でシーケンスの使用を開始するため、以前に生成された値は再表示されません。
UPDATE3: *シーケンス* http://en.wikipedia.org/wiki/Surrogate_keyを提供