2016-08-25 1 views
0

J'ai modélisé une base de données (CMS pour challenge personnel), 14 tables avec de nombreuses contraintes de clés étrangères (notamment 1 -> 0,1 relations) et Je vais remplir les tables avec des valeurs par défaut.Initialisation de la base de données (avec de nombreuses contraintes 1 ... 0,1) avec des valeurs par défaut

Le défi pour moi est de détecter une sorte de méthode dans quelle séquence remplir les tables, pour éviter les erreurs lors de l'insertion.

Existe-t-il une méthode distincte pour cela? Je continue d'avoir des erreurs dans le script d'initialisation à cause d'une mauvaise séquence!

Courte description: Une page peut contenir une entité de contenu, mais pas nécessairement. Un contenu peut contenir une ou plusieurs sections, mais pas nécessairement. La page et le contenu peuvent exister de manière autonome. Une page peut faire partie d'une communauté dans un meny ... etc. J'utilise framework d'entité comme mon orm et j'ai légèrement modifié edmx, donc je ne reçois pas de référence quand je fais une relation un-> beaucoup, f.ex.

Voici mon modèle et les relations:

enter image description here

Voici mon script d'initialisation de tout l'utilisateur et d'autres tables juste pour aller avec le codage de la procédure de connexion:

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 

Ce script insère tout sauf les deux dernières insertions (utilisateur) car il génère une erreur:

(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. 

Voici mes contraintes de clé étrangère;

--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

Des exemples de données, les résultats souhaités et un script simplifié aideraient vraiment à expliquer ce que vous essayez de faire. –

+0

En général, vous devez partir de l'entité la plus "interne", celle qui n'est pas référencée par d'autres entités (ex. A), puis en n'insérant que des entités (B, C) référençant uniquement les entités que vous venez d'insérer (A), et ainsi de suite. – Wallkan

+0

Ça pourrait être difficile. Supposons que AB est une référence croisée pour A et B et que la vapeur d'entrée contient des paires (a1, b1) (a1, b2) ... Le script qui lit le flux et remplit A, B et AB doit vérifier et insérer conditionnellement toutes les données 3 tables. Pouvez-vous être plus précis sur le schéma DB et les entrées? – Serg

Répondre

0

La visualisation aide beaucoup. Utilisez un outil qui peut vous montrer les relations et peut traverser les relations parents-enfants. Il suffit de trouver la table "racine", de faire une insertion et d'aller à ses enfants.