2016-08-25 1 views
0

데이터베이스 (개인적인 도전을위한 CMS), 외래 키 제약 조건이 많은 14 개의 테이블 (특히 1 -> 0,1 관계) 및 테이블을 기본값으로 채 웁니다.기본값으로 데이터베이스 초기화 (많은 1 ... 0,1 제약 조건 포함)

나를위한 도전은 삽입 할 때 오류를 방지하기 위해 테이블을 채우기 위해 어떤 순서로 어떤 방법론을 감지하는 것입니다.

이렇게하는 몇 가지 고유 한 방법이 있습니까? 잘못된 시퀀스 때문에 초기화 스크립트에서 몇 가지 오류가 계속 발생합니다!

간단한 설명 : 페이지에는 콘텐츠 항목을 포함 할 수 있지만 반드시 그럴 필요는 없습니다. 콘텐츠는 하나 이상의 섹션을 포함 할 수 있지만 반드시 그런 것은 아닙니다. 페이지와 컨텐트는 모두 독립형으로 존재할 수 있습니다. 페이지는 meny에있는 커뮤니티의 일부가 될 수 있습니다.

필자는 orm으로 엔티티 프레임 워크를 사용하고 있으며 edmx를 약간 수정 했으므로 한 -> 많은 관계를 수행 할 때 참조를 얻지 못했습니다.

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 
:

다음

enter image description here

그냥 로그인 절차의 코딩 야 내 초기화 단지 사용자의 스크립트와 다른 테이블입니다 : 여기

내 모델과 관계있다

이 스크립트는 오류가 발생하기 때문에 두 개의 마지막 삽입 (사용자)을 제외한 모든 문자를 삽입합니다.

(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

시각화가 많은 도움이됩니다. 관계를 보여줄 수있는 도구를 사용하고 부모 - 자식 관계를 탐색 할 수 있습니다.

"최상위"테이블 (루트)을 찾아 삽입하고 이동하십시오.

관련 문제