誰かが私にoverlapping candidate key
?名前が示すようにoverlapping
とは何ですか?
以下の関係を検討してください
R(L,M,N,O,P)
{
M -> O
NO -> P
P -> L
L -> MN
}
上記の関数の依存関係のどれが上記の関係で重複する候補キーをもたらしていますか?
ディスカッションを依存関係に制限しましょう。現時点ではBCNFには興味がありません。
可能性のある候補キーであるvikkyhacksがあれば、あなたはお金を手にすることができます。重複する候補キーは、少なくとも1つの共通の属性を持つ複合(複数の属性で構成される)候補キーです。したがって、重複する候補キーはNMおよびNO(Nを共有)です。
上記の追加説明。最初はコメントに残されています:
重複するすべての候補キーは、(たとえば2つ以上の)候補キーのグループです。つまり、最初の基準は、リレーションR
に複数の候補キー(最小のスーパーキー)が必要であることです。候補キーのいずれかが重複するためには、それらのそれぞれ(2つ以上)がいくつかの追加条件を満たす必要があります。 1)それらは両方とも複合候補キーでなければなりません。これらは複数の属性で構成される必要があるため、A
のようなキーは決して重複しませんが、AB
は別のキーと重複する可能性があります。 2)複合キーは属性を共有する必要があります。 AB
は、AC
およびBD
と重複しますが、CD
またはEF
とは重複しません。
要約すると、1)各セットが関係の候補キー(最小スーパーキー)である2つ以上の属性のセット、2)各セットが複合キー(複数の属性で構成される)、3)1つ以上の属性のセット複合キーの属性は、セット内の別のキーの属性と重複しています。したがって、MNOP
とNOPL
は、最小限のスーパーキーではないという理由で除外できます。 P
とL
は、それらが複合キーではない(1つの属性で構成される)ことに基づいて除外できます。 NO
とNM
の2つのキーが残り、これらは属性N
を共有しているので完了です。
また、実際に頭を包むことができる例があると役立つ場合もあります。重複する候補キーが表示されるのは、1)2つの属性が機能的に決定するときだけです(たとえば、A
とB
の1対1の関係で、A
には1つのB
があり、B
には1つありますA
)および2)これらの属性は、複合候補キーの一部です。
たとえば、一部のシステムでは、Customer
には1つのCreditCard
があり、CreditCard
は1つのCustomer
に属しています。 Rentalsテーブルでは、Rental
、EquipmentId
、Date
によってCustomerId
を一意に識別します。便宜上、CreditCard
もこのテーブルに格納しています。
つまり、次のFDが保持されます。
{CustomerId, EquipmentId, Date} -> {CreditCard}
{CustomerId} -> {CreditCard}
ただし、関連付けは1対1であるため、次のFDも保持されます。
{CreditCard} -> {CustomerId}
{CreditCard, EquipmentId, Date} -> {CustomerId}
CustomerId
とCreditCard
は同じ意味で使用できるため、顧客を一意に識別できます。
上記のシナリオでは、重複する候補キーがあります。
{CreditCard, EquipmentId, Date}
{CustomerId, EquipmentId, Date}
compositeキー(複数の属性で構成される)であり、少なくとも1つの属性が共有されている(この場合、EquipmentId
とDate
の両方を共有している)ため、重複しています。
現時点では、BCNF
は気にしないとおっしゃっていましたが、このホームを完全に持ち帰るために、3NF
にあるがBCNF
ではないテーブルがときどき表示されるのは、上記のシナリオが原因です。上記の表は3NF
にありますが、BCNF
にはありません。
3NF
はFDを許可します。1)FDは自明です。2)FDの左側は候補キーであるか、3)FDの右側はキー属性(任意のキーの作成に使用される属性)です。 CreditCard
とCustomerId
はどちらもキー属性であるため、すべてのFDは2または3のいずれかを満たします。
BCNF
は非常によく似ていますが、3NF
で許可されている条件1および2のみが許可されます。 3番目の条件はBCNF
では許可されておらず、CID -> CC
とCC -> CID
の両方が条件3を使用しているため、このテーブルはBCNF
ではなく3NF
です。
実際の目的では、このケースはかなりまれであり、この情報は知識が豊富です。テーブルに問題があるのは、CreditCard/CustomerId
のペアがテーブル全体で繰り返されているためです。また、CreditCard
は主キーへの部分的な依存関係であるため、FDの右側がキー属性である可能性があるこのまれな条件がないと、テーブルが2NF
に含まれないことも認識できます(CustomerId
に依存しますが、 EquipmentId
またはDate
。
候補キーは、最小限のスーパーキーを構成する属性のセットです。 2つの候補キーAとBは、いくつかの共通の属性がある場合、重複していると言います。つまり、A∩Bは空ではありません。あなたの場合、MNとNOはRの候補キーと重複しています。
最小性(既約性)要件のため、1つの候補キーが同じ関係の別のキーになることはありません。つまり、リレーションの2つの異なる候補キーが重複する場合、両方が複数の属性で構成されている必要があります。 )空でない必要があります。
最初の3つのFDを組み合わせて
MNOP -> L
したがって、MNOPは1つの候補キー、CK1です。
同様に、最後の3つのFDを組み合わせて
NOPL -> M
したがって、NOPLはもう1つの候補キー、CK2です。
ただし、CK1とCK2には共通の列NOPがあり、重複候補キーになります。