web-dev-qa-db-ja.com

重複する候補キーとは正確には何ですか?

誰かが私にoverlapping candidate key?名前が示すようにoverlappingとは何ですか?

以下の関係を検討してください

R(L,M,N,O,P) 
{
    M -> O
    NO -> P
    P -> L
    L -> MN
}

上記の関数の依存関係のどれが上記の関係で重複する候補キーをもたらしていますか?

ディスカッションを依存関係に制限しましょう。現時点ではBCNFには興味がありません。

8
vikkyhacks

可能性のある候補キーであるvikkyhacksがあれば、あなたはお金を手にすることができます。重複する候補キーは、少なくとも1つの共通の属性を持つ複合(複数の属性で構成される)候補キーです。したがって、重複する候補キーはNMおよびNO(Nを共有)です。

上記の追加説明。最初はコメントに残されています:

重複するすべての候補キーは、(たとえば2つ以上の)候補キーのグループです。つまり、最初の基準は、リレーションRに複数の候補キー(最小のスーパーキー)が必要であることです。候補キーのいずれかが重複するためには、それらのそれぞれ(2つ以上)がいくつかの追加条件を満たす必要があります。 1)それらは両方とも複合候補キーでなければなりません。これらは複数の属性で構成される必要があるため、Aのようなキーは決して重複しませんが、ABは別のキーと重複する可能性があります。 2)複合キーは属性を共有する必要があります。 ABは、ACおよびBDと重複しますが、CDまたはEFとは重複しません。

要約すると、1)各セットが関係の候補キー(最小スーパーキー)である2つ以上の属性のセット、2)各セットが複合キー(複数の属性で構成される)、3)1つ以上の属性のセット複合キーの属性は、セット内の別のキーの属性と重複しています。したがって、MNOPNOPLは、最小限のスーパーキーではないという理由で除外できます。 PLは、それらが複合キーではない(1つの属性で構成される)ことに基づいて除外できます。 NONMの2つのキーが残り、これらは属性Nを共有しているので完了です。

また、実際に頭を包むことができる例があると役立つ場合もあります。重複する候補キーが表示されるのは、1)2つの属性が機能的に決定するときだけです(たとえば、ABの1対1の関係で、Aには1つのBがあり、Bには1つありますA)および2)これらの属性は、複合候補キーの一部です。

たとえば、一部のシステムでは、Customerには1つのCreditCardがあり、CreditCardは1つのCustomerに属しています。 Rentalsテーブルでは、RentalEquipmentIdDateによってCustomerIdを一意に識別します。便宜上、CreditCardもこのテーブルに格納しています。

つまり、次のFDが保持されます。

{CustomerId, EquipmentId, Date} -> {CreditCard}
{CustomerId} -> {CreditCard}

ただし、関連付けは1対1であるため、次のFDも保持されます。

{CreditCard} -> {CustomerId}
{CreditCard, EquipmentId, Date} -> {CustomerId}

CustomerIdCreditCardは同じ意味で使用できるため、顧客を一意に識別できます。

上記のシナリオでは、重複する候補キーがあります。

{CreditCard, EquipmentId, Date}
{CustomerId, EquipmentId, Date}

compositeキー(複数の属性で構成される)であり、少なくとも1つの属性が共有されている(この場合、EquipmentIdDateの両方を共有している)ため、重複しています。

現時点では、BCNFは気にしないとおっしゃっていましたが、このホームを完全に持ち帰るために、3NFにあるがBCNFではないテーブルがときどき表示されるのは、上記のシナリオが原因です。上記の表は3NFにありますが、BCNFにはありません。

3NFはFDを許可します。1)FDは自明です。2)FDの左側は候補キーであるか、3)FDの右側はキー属性(任意のキーの作成に使用される属性)です。 CreditCardCustomerIdはどちらもキー属性であるため、すべてのFDは2または3のいずれかを満たします。

BCNFは非常によく似ていますが、3NFで許可されている条件1および2のみが許可されます。 3番目の条件はBCNFでは許可されておらず、CID -> CCCC -> CIDの両方が条件3を使用しているため、このテーブルはBCNFではなく3NFです。

実際の目的では、このケースはかなりまれであり、この情報は知識が豊富です。テーブルに問題があるのは、CreditCard/CustomerIdのペアがテーブル全体で繰り返されているためです。また、CreditCardは主キーへの部分的な依存関係であるため、FDの右側がキー属性である可能性があるこのまれな条件がないと、テーブルが2NFに含まれないことも認識できます(CustomerIdに依存しますが、 EquipmentIdまたはDate

9
Brett Cassette

候補キーは、最小限のスーパーキーを構成する属性のセットです。 2つの候補キーAとBは、いくつかの共通の属性がある場合、重複していると言います。つまり、A∩Bは空ではありません。あなたの場合、MNとNOはRの候補キーと重複しています。

最小性(既約性)要件のため、1つの候補キーが同じ関係の別のキーになることはありません。つまり、リレーションの2つの異なる候補キーが重複する場合、両方が複数の属性で構成されている必要があります。 )空でない必要があります。

4
nvogel

最初の3つのFDを組み合わせて

MNOP -> L

したがって、MNOPは1つの候補キー、CK1です。

同様に、最後の3つのFDを組み合わせて

NOPL -> M

したがって、NOPLはもう1つの候補キー、CK2です。

ただし、CK1とCK2には共通の列NOPがあり、重複候補キーになります。

1
Pieter Geerkens