2016-04-22 35 views
0

私は4つのテーブルStore,Employee,Customer,Addressを持っています。最初の3つのテーブルをAddressにリンクしました。今私はこのFKを削除し、これらのテーブルをAddressに参照したいと思います。どうしたらいいですか?SQL Serverの外部キーと参照テーブルを削除します

表構造:

ストア

StoreID(PK), BranchName 

従業

EmpID(PK), Name 

お客様

CustID(PK), Name 

住所

AddID(PK), 
    ID(FK to Store.StoreID, Employee.EmpID, Customer.CustID), 
    AddressDetail 

私はAddress.IDFKを削除し、ちょうど3つのテーブルにそれを参照するようにしたいです。

+0

http://stackoverflow.com/a/190306/119477を参照してください。3つのオプションがあります。私はTPCが好きですが、TPTが必要なことは、別のテーブルが必要なことを意味します。 –

+0

誰かがどのようにデザインをすることになったのか疑問に思っています! – FLICKER

答えて

1

ALTER TABLEステートメントでFOREIGN KEY制約を削除できます。たとえば、列を削除するには、ALTER TABLEステートメントを再度実行します。

ALTER TABLE [Address] DROP COLUMN [ID] 

実装しようとしているデータモデルはまったく明確ではありません。顧客に関連付けることができる住所の数はいくつですか? 1つだけ、または複数の?同じ住所を顧客と従業員に関連付けることはできますか?特定の住所を複数の顧客に関連付けることはできますか?

エンティティリレーションシップモデルでは、「アドレス」は通常、エンティティではなく複合属性です。多くの場合、住所は複数の値を持つ属性です(たとえば、顧客は複数の住所または複数の電話番号を持つことができます)。場合によっては、電話番号がタイプ(メイン、モバイル、オフィス、ファックスなど)と同じように、アドレスは特定のタイプの住所(配送先住所、請求先住所、オフィス住所、自宅住所)になります。

データモデルを理解することなく、モデルを実装するためにデータベーステーブルに加えなければならない変更についての推奨はできません。

+0

レコードごとに1つのアドレスがある場合は、すべてのテーブルにアドレス用の列を追加する必要がありますか? – DhavalR

+0

または、Employeeに外部キー列を追加し、[Addresss_AddID]をAddressテーブルのAddID列と同じデータ型(int?)で追加します。そして、[FK_Emplouyee_Address]外部キー[Address_AddID]参照[Address]([AddID])という制約を定義します。外部キー列と外部キー制約を追加する[顧客]と[ストア]に対して同じパターンを繰り返すことができます。 – spencer7593

+0

つまり、私は 'Employee'を' EmpID(PK)、AddID(FK Address.AddID)、... 'に変更しますか?そして他の人のために。 – DhavalR

関連する問題