2011-01-20 27 views
1

私はこれらの関係を学ぼうとしています。単に、親、子のIDキーのIDキーを行うことにより0..1関係:データベース関係1:1対1:0..1

1)私は1を持っています。私はその下に表示されて、それは正しいですか?それ1ようにするに

2):1、私は2つのID列を接続し、親テーブルでFKを追加しますか?

これはすべてですか?私の言葉が正確ではない/正しい場合、私を修正してください。

1:0..1 

顧客(同上{PK、アイデンティティ}、名前)

CustomerAddress(CustomerIdの{PK、FK、アイデンティティ}、StreetName)

FK_CustomerAddress_Customer(CustomerIdの、同上)

1:1 

顧客(同上{PK、FK、アイデンティティ}、名前)

FK_Customer_CustomerAddress(ID、のCustomerId)

CustomerAddress(CustomerIdの{PK、FK、アイデンティティ}、Streetname)

FK_CustomerAddress_Costumer(CustomerIdの、同上)


EDIT1:私は信じている

は、上記の両方間違っていた、とソリューションは、このようなものです:(?)

1:0..1 

カスタマー(同上{PK、アイデンティティ}、名前)

カスタマーアドレス(Customer ID {PK、FK、ユニーク}、StreetName)

FK_CustomerAddress_Customer(CustomerId、Id)

+0

「1:0..1」(「1対1または1」)を意味するのでしょうか。 – onedaywhen

+0

はい、私はそれを編集します。 – bretddog

+0

お客様がcostumer(衣装をデザインする人)ではないことを意味する場合は、テーブルとフィールドのスペルを修正してください。 AND IDはIDフィールドにとってひどい選択です。レポートに問題が発生し(レポートで同じ名前の複数の列が気に入らない)、結合で間違いを起こしやすい。代わりにtablenameIdを使用してください。 – HLGEM

答えて

4

2つのテーブルの1対1の関係は、各テーブルの各タプルが、別のタプルに正確に1つのタプルにマッピングされることを意味します。これは正式にはバイジェクション(Bijection)として知られています。ほとんどの実用的な目的のために、バイジェクションはSQLデータベースで達成することが事実上不可能であることはSQLの限界です。これは、SQLでは各テーブルを個別に更新する必要があるため、制約の1つを一時的に無効にしない限り、このようなテーブルを2つ更新する方法はありません。

1:0/1の関係は、Surjection(あなたの最初の例)とも呼ばれます。例外は、SQLスタイルの「FOREIGN KEY」制約の標準的な動作です。この制約は、関係の片側では常にオプションです。

注:IDENTITYプロパティは、あなたの例には関係ありません。これは、関係を定義するキーと外部キーの制約です。

+0

遅延可能制約をサポートするDBMSは、DDLだけを使用して1:1の関係を強制できます。トリガが必要な場合は、トリガを使用してSQL Serverに同じ効果を得ることができるかもしれませんが、今は難しいと思うにはあまりにも疲れています。 –

+0

はい、延期可能な制約で実行できます。ただし、遅延可能な制約は、更新を行うたびに制約が違反されるように一時的に無効にできる制約に過ぎません。言い換えれば、制約は実際に宣言的制約として強制されているわけではありません。この点で、SQLによるマルチテーブル制約のサポートは非​​常に制限されています。 SQL Serverの回避策は、制約を無効にしてから再度有効にすることです。 – sqlvogel

+0

@dportas: "遅延可能な制約は、更新を行うたびに制約が違反されるように一時的に無効にできる制約です"。それはそれを見る一つの方法です。もう1つの方法は、遅延可能な制約が、任意の一連のSQL文の終わりでチェックされる制約です(中間のどこかではなく、トランザクション0の最後にあります)。 –

3

外部キーは一方向のみを指すことができます。インサートは一度に1つのテーブルでしか動作できないので、2つの方法でポイントすると、行を挿入することはできません。

したがって、1:0,1のリストは、通常、両方のケースで使用されます。私が知る限り、SQL Serverは1:1の制約で2番目の1を達成する手段を提供していません。

+0

乾杯!それは意味をなさない始めている:) – bretddog

+0

bretdog ...答えを受け入れることを忘れないでください。さもなければ評判が悪くなり、回答が一掃されなくなります:P –

0

テーマに興味深い読む:私は常に正規の別の 利点ではなく、それに 問題としてこの 制約[円形FKS]の損失を教える

ON POFN* AND POOD* - TWO COMPLEMENTARY DATABASE DESIGN PRINCIPLES with Fabian Pascal, Hugh Darwen and David McGoveran

+0

「正規化の利点」とはどういう意味ですか?最初は1:1を使用すべきではないと思いますか? – bretddog

+0

@bretddog:それらは私の言葉ではなく、Hugh Darwen'sです。リンク(http://www.dbdebunk.com/page/page/3010532.htm)に従って、記事をお読みください! :) – onedaywhen

+0

私はまだそれを理解していない。私のレベルより少し上。あなたが引用を使用するので、あなたは説明することができるはずです。;) – bretddog