2016-08-25 4 views
0

データベース(個人チャレンジのCMS)、多数の外部キー制約(具体的には1→0,1関係)を持つ14個のテーブルをモデル化し、私はデフォルト値でテーブルを埋めるでしょう。デフォルト値のデータベースを初期化する(多くの1 ... 0,1制約付き)

私の挑戦は、挿入時にエラーを避けるために、テーブルを埋めるために何らかの方法を検出することです。

これにはいくつかの方法がありますか?私は間違ったシーケンスのために、初期化スクリプトにいくつかのエラーが発生し続ける!

短い説明:ページはコンテンツエンティティを保持できますが、必ずしもそうである必要はありません。コンテンツは1つ以上のセクションを保持できますが、必ずしもそうである必要はありません。ページとコンテンツの両方がスタンドアロンとして存在することができます。ページはmenyのコミュニティの一部とすることができます...等。

私はormとしてエンティティフレームワークを使用しています。私はedmxを少し修正しました。したがって、私は1 - >多くの関係、f.exを行うときに参照を取得しません。ここで

は私のモデルとの関係である:ここで

enter image description here

だけで、ユーザーや他のいくつかのテーブルの私の初期化スクリプトがちょうどログイン手続きのコーディングと一緒に行くを取得することです:

USE [WebMateCMS] 
GO 

INSERT INTO [Category] 
VALUES ('93dad9c7-6b92-4f3b-a8a9-5a0c330290fc', 
     'Icon Flag', 
     'Icon Flags for the different languages', 
     '2016-03-17T08:32:55', --IsCreated 
     '2016-03-17T08:32:55', --IsValidFrom 
     '2016-03-17T08:32:55', --IsActivated 
     null, --IsDeleted 
     null, --IsEdited 
     null, --IsExpired 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- CreatedByNameID/System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ValidFromByNameID/System User account 
     null, --EditedByNameID 
     null, --ExpiredByNameID 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ActivatedByNameID/System User account 
     null) --DeletedByNameID 

INSERT INTO [Image] 
VALUES ('2f426aa0-752b-4032-a6d0-83d84eb4d0e3', 
     'English-Flag', 
     'English Icon Flag', 
     null, --ImageTypeID 
     null, --IsThumbnailOfID 
     'System string filler', --RecordedBy 
     'System string filler', --Copyright 
     'System string filler', --Meta 
     'System string filler', --OriginalSizePx 
     'System string filler', --Base64Original 
     'System string filler', --BinaryOriginal 
     'System string filler', --FilePath 
     null, --CategoryID 
     '2016-03-17T08:32:55', --IsCreated 
     '2016-03-17T08:32:55', --IsValidFrom 
     '2016-03-17T08:32:55', --IsActivated 
     null, --IsDeleted 
     null, --IsEdited 
     null, --IsExpired 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- CreatedByNameID/System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ValidFromByNameID/System User account 
     null, --EditedByNameID 
     null, --ExpiredByNameID 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ActivatedByNameID/System User account 
     null) --DeletedByNameID 


INSERT INTO [Image] 
VALUES ('57972deb-6a77-43f8-8b96-a6617a1c7efa', 
     'Danish-Flag', 
     'Danish Icon Flag', 
     null, --ImageTypeID 
     null, --IsThumbnailOfID 
     'System string filler', --RecordedBy 
     'System string filler', --Copyright 
     'System string filler', --Meta 
     'System string filler', --OriginalSizePx 
     'System string filler', --Base64Original 
     'System string filler', --BinaryOriginal 
     'System string filler', --FilePath 
     null, --CategoryID 
     '2016-03-17T08:32:55', --IsCreated 
     '2016-03-17T08:32:55', --IsValidFrom 
     '2016-03-17T08:32:55', --IsActivated 
     null, --IsDeleted 
     null, --IsEdited 
     null, --IsExpired 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- CreatedByNameID/System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ValidFromByNameID/System User account 
     null, --EditedByNameID 
     null, --ExpiredByNameID 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ActivatedByNameID/System User account 
     null) --DeletedByNameID 



INSERT INTO [Language] 
VALUES ('2f426aa0-752b-4032-a6d0-83d84eb4d0e3', 
     'English', 
     'English language', 
     'en', 
     null, 
     '2016-03-17T08:32:55', 
     '2016-03-17T08:32:55', 
     '2016-03-17T08:32:55', 
     null, 
     null, 
     null, 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- System User account 
     null, 
     null, 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- System User account 
     null) 


INSERT INTO [Language] 
VALUES ('57972deb-6a77-43f8-8b96-a6617a1c7efa', 
     'Dansk', 
     'Dansk sprog', 
     'dk', 
     null, 
     '2016-03-17T08:32:55', 
     '2016-03-17T08:32:55', 
     '2016-03-17T08:32:55', 
     null, 
     null, 
     null, 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- System User account 
     null, 
     null, 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- System User account 
     null) 


INSERT INTO [UsedPassword] 
VALUES ('5b8c3e64-d069-41c6-9554-0cf9c7da9fb7', 
     'Used passwords for [email protected]', 
     'Used passwords for [email protected]', 
     null, --UsedPasswords 
     null, --UsedSalts 
     '2016-03-17T08:32:55', --IsCreated 
     '2016-03-17T08:32:55', --IsValidFrom 
     '2016-03-17T08:32:55', --IsActivated 
     null, --IsDeleted 
     null, --IsEdited 
     null, --IsExpired 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- CreatedByNameID/System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ValidFromByNameID/System User account 
     null, --EditedByNameID 
     null, --ExpiredByNameID 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ActivatedByNameID/System User account 
     null) --DeletedByNameID 


INSERT INTO [UsedPassword] 
VALUES ('bffec845-a4fb-477a-bfcc-b7dbb97224cf', 
     'Used passwords for [email protected]', 
     'Used passwords for [email protected]', 
     null, --UsedPasswords 
     null, --UsedSalts 
     '2016-03-17T08:32:55', --IsCreated 
     '2016-03-17T08:32:55', --IsValidFrom 
     '2016-03-17T08:32:55', --IsActivated 
     null, --IsDeleted 
     null, --IsEdited 
     null, --IsExpired 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- CreatedByNameID/System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ValidFromByNameID/System User account 
     null, --EditedByNameID 
     null, --ExpiredByNameID 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ActivatedByNameID/System User account 
     null) --DeletedByNameID 



INSERT INTO [Credential] 
VALUES ('5b8c3e64-d069-41c6-9554-0cf9c7da9fb7', 
     '[email protected]', 
     'Credential for [email protected]', 
     'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', --PassWord 
     'bbbbbbbbb', --Salt 
     null, --Token 
     null, --Certificate 
     null, --Company 
     null, --ShowClass 
     null, --RoleID 
     null, --UsedPassWordsID 
     '2016-03-17T08:32:55', --IsCreated 
     '2016-03-17T08:32:55', --IsValidFrom 
     '2016-03-17T08:32:55', --IsActivated 
     null, --IsDeleted 
     null, --IsEdited 
     null, --IsExpired 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- CreatedByNameID/System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ValidFromByNameID/System User account 
     null, --EditedByNameID 
     null, --ExpiredByNameID 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ActivatedByNameID/System User account 
     null) --DeletedByNameID 


INSERT INTO [Credential] 
VALUES ('bffec845-a4fb-477a-bfcc-b7dbb97224cf', 
     '[email protected]', 
     'Credential for [email protected]', 
     'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', --PassWord 
     'bbbbbbbbb', --Salt 
     null, --Token 
     null, --Certificate 
     null, --Company 
     null, --ShowClass 
     null, --RoleID 
     null, --UsedPassWordsID 
     '2016-03-17T08:32:55', --IsCreated 
     '2016-03-17T08:32:55', --IsValidFrom 
     '2016-03-17T08:32:55', --IsActivated 
     null, --IsDeleted 
     null, --IsEdited 
     null, --IsExpired 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- CreatedByNameID/System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ValidFromByNameID/System User account 
     null, --EditedByNameID 
     null, --ExpiredByNameID 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ActivatedByNameID/System User account 
     null) --DeletedByNameID 



INSERT INTO [User] 
VALUES ('5b8c3e64-d069-41c6-9554-0cf9c7da9fb7', 
     'Administrator', 
     'User account for the administrator', 
     'User', 
     'RootUser', 
     '[email protected]', 
     null, --MobilePhoneNo 
     null, --ProfileImageID 
     null, 
     'RootUser', 
     '5b8c3e64-d069-41c6-9554-0cf9c7da9fb7', 
     null, 
     null, 
     null, 
     null, 
     null, 
     null, 
     null, 
     1, 
     1, 
     1, 
     '2f426aa0-752b-4032-a6d0-83d84eb4d0e3', -- languageid 
     0, --IsBlockedForSecurityReason 
     '2016-03-17T08:32:55', 
     '2016-03-17T08:32:55', 
     '2016-03-17T08:32:55', 
     null, 
     null, 
     null, 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- System User account 
     null, 
     null, 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- System User account 
     null) 

INSERT INTO [User] 
VALUES ('bffec845-a4fb-477a-bfcc-b7dbb97224cf', --ID 
     'User', --Name 
     'User account for the ordinary user', --Description 
     'User', --FirstName 
     'OrdinaryUser', --LastName 
     '[email protected]', --Email 
     null, --MobilePhoneNo 
     null, --ProfileImageID 
     null, --ProfileThumbnailImageID 
     'OrdinaryUser', --UserName 
     'bffec845-a4fb-477a-bfcc-b7dbb97224cf', --CredentialID 
     null, --LastLoginAttempt 
     null, --LastActive 
     null, --SequentialLoginAttempts 
     null, --TooManyFaultyLoginAttempts 
     null, --SessionID 
     null, --PreferredLoginMethod 
     null, --PreferredIpAdr 
     1, --CanComment 
     1, --ReceiveNewsMail 
     1, --ReceiveNewContentNotification 
     '57972deb-6a77-43f8-8b96-a6617a1c7efa', -- languageid 
     0, --IsBlockedForSecurityReason 
     '2016-03-17T08:32:55', --IsCreated 
     '2016-03-17T08:32:55', --IsValidFrom 
     '2016-03-17T08:32:55', --IsActivated 
     null, --IsDeleted 
     null, --IsEdited 
     null, --IsExpired 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- CreatedByNameID/System User account 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ValidFromByNameID/System User account 
     null, --EditedByNameID 
     null, --ExpiredByNameID 
     '65d6a29b-30b4-4d42-9b20-450182f393d2', -- ActivatedByNameID/System User account 
     null) --DeletedByNameID 

このスクリプトは、エラーが発生するため、最後の2つの挿入(ユーザー)を除くすべてを挿入します。

(1 row(s) affected) 

(1 row(s) affected) 

(1 row(s) affected) 

(1 row(s) affected) 

(1 row(s) affected) 

(1 row(s) affected) 

(1 row(s) affected) 

(1 row(s) affected) 

(1 row(s) affected) 
Msg 547, Level 16, State 0, Line 210 
The INSERT statement conflicted with the FOREIGN KEY constraint "User_ImageID_ZeroOrOne". The conflict occurred in database "WebMateCMS", table "dbo.Image", column 'ID'. 
The statement has been terminated. 
Msg 547, Level 16, State 0, Line 247 
The INSERT statement conflicted with the FOREIGN KEY constraint "User_ImageID_ZeroOrOne". The conflict occurred in database "WebMateCMS", table "dbo.Image", column 'ID'. 
The statement has been terminated. 

ここに私の外来の制約があります。

--Adding Foreign Key constraints-- 


--Page-- 

ALTER TABLE Page 
ADD CONSTRAINT Page_LanguageID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Language](ID) 
ALTER TABLE Page 
ADD CONSTRAINT Page_ImageID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Image](ID) 
ALTER TABLE Page 
ADD CONSTRAINT Page_MenuID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Menu](ID) 



--Content-- 

ALTER TABLE [Content] 
ADD CONSTRAINT Content_PageID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Page](ID) 
ALTER TABLE [Content] 
ADD CONSTRAINT Content_DocumentTypeID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Type](ID) 
ALTER TABLE [Content] 
ADD CONSTRAINT Content_IsLockedByNameID_Many FOREIGN KEY (IsLockedByNameID) REFERENCES [User](ID) 
ALTER TABLE [Content] 
ADD CONSTRAINT Content_WrittenByNameID_Many FOREIGN KEY (WrittenByNameID) REFERENCES [User](ID) 
ALTER TABLE [Content] 
ADD CONSTRAINT Content_LanguageID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Language](ID) 
ALTER TABLE [Content] 
ADD CONSTRAINT Content_ImageID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Image](ID) 


--Section-- 
ALTER TABLE [Section] 
ADD CONSTRAINT Section_ContentID_Many FOREIGN KEY (ContentID) REFERENCES [Content](ID) 
ALTER TABLE [Section] 
ADD CONSTRAINT Section_ImageID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Image](ID) 
ALTER TABLE [Section] 
ADD CONSTRAINT Section_IsLockedByNameID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [User](ID) 



--Image-- 
ALTER TABLE [Image] 
ADD CONSTRAINT Image_CategoryID_Many FOREIGN KEY (CategoryID) REFERENCES [Category](ID) 


--Menu-- 
ALTER TABLE Menu 
ADD CONSTRAINT Menu_LanguageID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Language](ID) 


--User-- 
ALTER TABLE [User] 
ADD CONSTRAINT User_LanguageID_Many FOREIGN KEY (LanguageID) REFERENCES [Language](ID) 
ALTER TABLE [User] 
ADD CONSTRAINT User_ImageID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Image](ID) 
ALTER TABLE [User] 
ADD CONSTRAINT User_CredentialID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Credential](ID) 

--Credentials-- 
ALTER TABLE [Credential] 
ADD CONSTRAINT Credential_RoleID_Many FOREIGN KEY (RoleID) REFERENCES [Role](ID) 
ALTER TABLE [Credential] 
ADD CONSTRAINT Credential_UsedPasswordsID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [UsedPassword](ID) 

--Role-- 
ALTER TABLE [Role] 
ADD CONSTRAINT Role_PermissionID_Many FOREIGN KEY (ID) REFERENCES [Permission](ID) 


--Language-- 
ALTER TABLE [Language] 
ADD CONSTRAINT Language_IconID_ZeroOrOne FOREIGN KEY (ID) REFERENCES [Image](ID) 

--Type-- 
ALTER TABLE Type 
ADD CONSTRAINT Type_CategoryID_Many FOREIGN KEY (CategoryID) REFERENCES [Category](ID) 
ALTER TABLE Type 
ADD CONSTRAINT Type_TemplateID_Many FOREIGN KEY (TemplateID) REFERENCES [Template](ID) 
+0

サンプルデータ、望ましい結果、簡略化されたスクリプトは、実際に何をしようとしているのかを説明するのに役立ちます。 –

+0

一般に、他のエンティティ(例えばA)によって参照されていないものから、挿入したエンティティのみを参照するエンティティ(B、C)のみを挿入して、最も内部のエンティティから始めなければなりません。 A)などがあります。 – Wallkan

+0

それは難しいかもしれません。 ABがAとBの相互参照であり、入力ストリームにペア(a1、b1)(a1、b2)が含まれているとします。ストリームを読み込んでA、B、ABのデータを読み込み、 3つのテーブル。あなたはDBスキーマと入力に関するより具体的なことができますか? – Serg

答えて

0

視覚化が大いに役立ちます。関係を示すことができ、親子関係を横断することができるツールを使用してください。

"最上位"のテーブル(ルート)を見つけて挿入して、その子に移動するだけです。

関連する問題