私はこのような2つのテーブルを持っています:
// Person.Details Table:
PersonID int [PK] | EmployeeCreatorID int [FK] | FirstName varchar | OtherInfo...
// Employee.Details Table:
EmployeeID int [PK] | PersonID int [FK] | IsAdmin bit | OtherInfo...
各テーブルは互いに関連しています。
[Employee.Details.PersonID]===>[Person.Details.PersonID] AND
[Person.Details.EmployeeCreatorID]===>[Employee.Details.EmployeeID]
それらの外部キーを介して。
問題は、外部キー制約の1つを削除し、行を挿入してから制約を追加し直さないと、最初の人/従業員を作成できないことです(これはかなり不自由です)。
ここで明らかな神のパラドックスは、最初の「従業員」はそれ自体を作成するために存在しないということです (「人」)。
2 つのテーブルに同時にデータを挿入する方法はありますか? この作成者が作成者であるというシナリオは、一度だけ発生する必要があります。データを 2 つのテーブルに同時に挿入できない場合、天才が提案する他の方法はありますか?
明確化
「生徒」や「保護者」など、「人物」テーブルに関連する他のテーブルがあります。個人はタイプを切り替えることはできません (従業員は学生または保護者に切り替えることはできません。また、その逆も同様です)。このパラドックスは、ManagerID FK を持つ Employee テーブルに似ています。私の場合を除いて、テーブルは分離されています。
ソリューション は、Remus Rusanu と b0fh に感謝します
--/*seeds database with first employee*/
BEGIN TRAN
GO
INSERT INTO Person.Details
(EmployeeCreatorID, FirstName, Active)
VALUES
(@@Identity, 'Admin', 1)
DECLARE @Identity int;
SET @Identity = @@Identity;
INSERT INTO Employee.Details
(PersonID, IsAdmin, Email, Password)
VALUES
(@Identity, 1, 'admin', 'admin')
UDPATE
Person.Details
SET
EmployeeCreatorID = @@Identity
WHERE
PersonID = @Identity
IF(@@ERROR <> 0)
ROLLBACK TRAN
ELSE
COMMIT TRAN