1

テーブル内の各行を識別できる一意の列がない場合、

私の主キーは、少なくとも 2 つのフィールドのセットになります。

あれは正しいですか?

それが正しければ、関係図を描くときに、主キーを構成する 2 つの属性に下線を引く必要がありますか?

ありがとうございました

4

3 に答える 3

2

いくつかの用語を次に示します。

  • スーパーキーは、行を一意に識別する一連の列です。
  • 候補キー(または単に「キー」) は、最小の1のスーパーキーです。キーには 1 つの列だけが含まれる場合もあれば、複数の列が含まれる場合もあります (この場合、「複合」と呼ばれます)。
  • 実用的な理由から、キーをキーまたは代替キーとして分類します。1 つのテーブルには、1 つの主キーと 0 個以上の代替キーがあります。
  • キーがデータの固有のプロパティから生じる場合、そのキーは「自然」です。つまり、何かを「意味する」のです。
  • キーは、それ自体では何の意味も持たない場合、「サロゲート」です。キーは、識別の目的でのみ存在します。通常、自動インクリメント整数として実装されますが、GUID (レプリケーションに役立つ) などの他の戦略がある場合があります。自然キーが複合であることは非常に一般的ですが、サロゲートではほとんど起こりません。

「明らかな」自然キーがない場合、行全体が常にキーとして機能します2。ただし、これが実用的であることはめったになく、そのような場合は通常、行を識別するためだけに代理キーを導入します。

常にではありませんが、既存の自然キーに加えてサロゲートを導入すると便利な場合があります。

ER図は、PK 3が天然か代理か、複合かどうかを明確に識別します。これがどのように見えるかは、使用されている表記法によって異なりますが、PK は通常、グラフィカルに異なる方法で描画され、「PK」で始まる可能性があります。


1つまり、列を削除すると、一意ではなくなります。

2データベース テーブルは、「関係」の数学的概念を物理的に表現したものです。関係が設定されているため、2 つの同一の行を持つ目的はありません。そのため、少なくとも行全体が一意である必要があります (要素がセット内にあるかどうかにかかわらず、セット内で「2 回」になることはありません。マルチセットとは異なります)。

3エンティティ レベルだけではなく、属性がまったく表示されないと仮定します。

于 2012-09-12T00:16:24.753 に答える
1

あなたの言う通りです。技術的には、主キーと一意のキーは 2 つの異なるものにすることができます。そのエンティティを一意に識別するテーブルまたはエンティティに主キーを設定することもできます。同じテーブルに一意のキー制約を設定できます。これを使用すると、選択した基準に従って、2 つの行が同じプロパティを持つことはなくなります。したがって、同じテーブルに主キーと一意の制約の両方を設定できます。DBで自動生成される主キー列を用意し、一意キー制約を適用するために使用するテーブル内の2つの列を選択するだけです

于 2012-09-12T07:21:28.277 に答える
0

主キーがない場合、データを識別できますが、パフォーマンスは高くありません。

また、ベスト プラクティスとして、テーブルで primary を使用します。

設定は、自動インクリメント列を主キーとして使用することです

于 2012-09-11T19:56:19.803 に答える