私たちは、Person.car_idがCompanyCar.car_idへの外部キーでなければなりませんが、私はPerson.car_idがNULL可能になりたい(FKがnullでない場合は強制)オプションの関係を実装
Person(person_id, name, car_id)
CompanyCar(car_id, make, model, colour, plate)
これらのテーブルがあるとし私は、LINQからSQLへのDataContextを生成するsqlmetal実行したときに存在場合、私は
class Person{
int person_id,
string name,
int? car_id,
CompanyCar companyCar //object references may hold null
}
とを取得する必要があり、Person.car_idはCompanyCarに存在する必要があります。
私が読んだMSDNの文書によると、これは可能ではありませんでしたが、試してみるとうまくいきました。オンラインでこのタイプの関係について書いたり質問したりする人はほとんどいません。
この外部キーを強制的に実行することはできますか?
UPDATE:ここ は、私が作成したスクリプトのために尋ねられたときSMSSが発生したものです。 FKはNOCHECK として作成されますが、という名前で作成されていますが、CompanyCarテーブルに存在しないことがわかっているCarID(たとえば9999)を入力すると文句を言います。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Person](
[PersonID] [int] NOT NULL,
[Name] [varchar](100) NOT NULL,
[CarID] [int] NULL
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED
(
[PersonID] ASC
)WITH FILLFACTOR = 92 ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Person] WITH NOCHECK ADD CONSTRAINT [FK_Person_CompanyCar] FOREIGN KEY([CarID])
REFERENCES [dbo].[CompanyCar] ([CarID])
GO
(名前の不整合のための謝罪、ジョブは例の命名が必要です)
テーブルと外部キーの作成に使用したSQLを表示してください。外部キーが定義されていて、値が提供されている場合は**チェックされます**。値がNULLの場合、チェックされません。 –
with nocheckは、alter table cmdの時点でpersonテーブルである可能性のある既存のデータを検証しません。 Fkは、personテーブルのすべての新しい挿入と更新でチェックされ、carテーブルのpkの削除と更新が行われます。 –