に論理データモデルを変換、私は以下の構造を有する実体を持っています。私が実行している質問は、ここでプライマリキーをどのように扱うかです。 SQLテーブルが複数の主キーを持つことはOKですか?この質問に対する答えが「はい」の場合、どの列がユニークなインデックスとして機能するはずですか?一意のインデックス識別子として機能する新しい列を作成する必要がありますか?私は最近作られたLDMでSQL表のデザイン
ありがとうございました!私は今まで主キーを持つことができます知っている
に論理データモデルを変換、私は以下の構造を有する実体を持っています。私が実行している質問は、ここでプライマリキーをどのように扱うかです。 SQLテーブルが複数の主キーを持つことはOKですか?この質問に対する答えが「はい」の場合、どの列がユニークなインデックスとして機能するはずですか?一意のインデックス識別子として機能する新しい列を作成する必要がありますか?私は最近作られたLDMでSQL表のデザイン
ありがとうございました!私は今まで主キーを持つことができます知っている
任意のリレーショナルデータベースシステム(SQL ServerやOracle、Firebirdの、IBM DB2、Sybaseのなど)のための任意のSQLテーブルに - そこに - 結局のところ、それは主キーですただ一つになることができます。
ただし、主キーは複数の列(「複合主キー」と呼ばれます)から構成できます。他のテーブルのすべての外部キー制約には、化合物PKのすべてのカラムを指定する必要があります。したがって、テーブルの結合に苦労します(テーブルに含まれるすべての列の等価制約をすべて指定する必要があるためです)。あなたのJOINのキー)。
プライマリキー以外に、代替キー - 行を一意に識別できる他の列を複数持つこともできます。それらは優れた候補者を作る。あなたがテーブルへのアクセスをスピードアップするのに役立つのであれば(インデックスはあなたのテーブルをオーバーインデックスしません)。
Marc。だから私は新しいプライマリキーを作成する(この場合、私はBuilding_IDをプライマリキーにする)と、 "build_year"からプライマリキー制約を削除することをお勧めしますか? –
@Evan: 'Building_ID'はそれ自身ではNOT NULLであることが保証されており、各行に固有のものですか?そうすれば、完璧な主キーが作られます。その1つの列だけがテーブル内の各行を一意かつ確実に識別する作業を行う場合は、主キーに列を追加することはできません** –
問題は、 'Building_ID'もまた別のエンティティへの外部キーです'ビルディング'。上記の唯一のプライマリキーは他のテーブルへの外部キーも 'Build_Year'ですが、それは直面しますが、それは決してユニークであることは保証されません。 –