2016-04-28 11 views
-1

Ich erstelle ein paar nach einer Kundenanfrage und ich habe eine Aussage und ich frage mich, ob es scheitern wird oder wenn ich einige Zeilen Code hinzufügen muss, so wird es nicht fehlschlagen.Tabelle Creation Statement

CREATE TABLE AuditReport 
(
    AR_ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL, 
    TPPRM_ID NVARCHAR(8) NOT NULL FOREIGN KEY REFERENCES Vendor(TPPRM_ID) ON DELETE CASCADE ON UPDATE CASCADE, 
    OR_ID INT NOT NULL FOREIGN KEY REFERENCES OversightResults(OR_ID) ON DELETE CASCADE ON UPDATE CASCADE, 
    AR_ReportNAme NVARCHAR(20) NOT NULL, 
    AR_Version NVARCHAR(7), 
    AR_Type NVARCHAR(20), 
    AR_DateCoveragePeriod DATETIME2, 
    AR_DateReceived DATETIME2, 
    AR_Opinion NVARCHAR(11) CONSTRAINT CHK_Opinion CHECK (AR_Opinion IN ('Qualified','Unqualified')), 
    AR_NextReportDate DATETIME2, 
    AR_KeyContactName NVARCHAR(30), 
    AR_ContactEmail NVARCHAR(40), 
    AR_ContactPhoneNumber NVARCHAR(14) 
) 

--Create OversightResults Table 
CREATE TABLE OversightResults 
(
    OR_ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL, 
    AR_ID INT NOT NULL FOREIGN KEY REFERENCES AuditReport(AR_ID) ON DELETE CASCADE ON UPDATE CASCADE, 
    TPPRM_ID NVARCHAR(8) NOT NULL FOREIGN KEY REFERENCES Vendor(TPPRM_ID) ON DELETE CASCADE ON UPDATE CASCADE, 
    OR_ServiceObjectives BIT, 
    OR_Objectives BIT, 
    OR_ControlsTested BIT, 
    OR_ManagementUserEntity NVARCHAR(10) CONSTRAINT CHK_ManagementUserEntity CHECK (OR_ManagementUserEntity IN ('Management','User')), 
    OR_Controls NVARCHAR(MAX), 
    OR_ServicerResponse NVARCHAR(MAX), 
    OR_ArvestMitigatingControls NVARCHAR(MAX), 
    OR_Deficiency NVARCHAR(10), 
    OR_Recommdations NVARCHAR(MAX), 
    OR_Observations NVARCHAR(MAX), 
    OR_Sufficiency BIT, 
    OR_RiskIdentified NVARCHAR(MAX) 
) 

Wie Sie in der Tabelle Design der Audit-Bericht Tabelle hat sehen können, als Fremdschlüssel und die Aufsichtsergebnistabelle hat es als Primärschlüssel und Aufsichtsergebnisse haben AR_ID als Fremdschlüssel und Audit-Bericht hat es OR_ID als Primärschlüssel. Wie die Aussage jetzt steht, wird die Audit-Berichtstabelle nicht erstellt, weil eine Tabelle mit OR_ID als Primärschlüssel noch nicht erstellt wurde?

+0

Bitte geben Sie das Ergebnis der Abfrageausführung – piyushj

+0

Ausprobieren würde dies beantworten, aber hey. Ja. Dies ist eine zirkuläre Abhängigkeit. Wahrscheinlich müssen Sie nach der Erstellung einen der Einschränkungen hinzufügen, um dies zu umgehen. Obwohl ich in Frage stelle, ob es Sinn macht, dies zu tun. Wird es nur einen "AuditReport" für ein "OversightResult" geben? Wenn ja, warum nicht beide in die gleiche Tabelle? Wenn nein, ist die beabsichtigte Verknüpfung nicht in beide Richtungen möglich. Auch ich denke, OR_Recommdations ist ein Tippfehler. –

+0

Sie könnten versuchen, sie als temporäre Tabellen zu erstellen (setzen Sie ein # vor dem Namen), auf diese Weise sehen Sie alle Fehler, ohne die Tabellen tatsächlich zu erstellen. Denken Sie daran, dass Sie die Tabellen am Ende löschen müssen, sonst erhalten Sie Fehler, wenn Sie die gleiche Tabelle das nächste Mal neu erstellen. –

Antwort

0

Wenn dies wirklich eine 1: 1-Beziehung sein soll, legen Sie sie alle in eine Tabelle. Wenn Sie möchten, können Sie dann einige Ansichten auf die Tabelle erstellen, um die Ergebnisse zu trennen, zB:

CREATE VIEW vw_OversightResults AS 
WITH SCHEMABINDING 
SELECT 
    OR_ID, 
    TPPRM_ID, 
    OR_ServiceObjectives, 
    OR_Objectives, 
    OR_ControlsTested, 
    OR_ManagementUserEntity, 
    OR_Controls, 
    OR_ServicerResponse, 
    OR_ArvestMitigatingControls, 
    OR_Deficiency, 
    OR_Recommdations, 
    OR_Observations, 
    OR_Sufficiency, 
    OR_RiskIdentified 
FROM AuditReport 

Und es sollte nicht allzu schwer sein, diese eine indizierte Sicht zu machen, wenn entweder sein muss ...

Andernfalls müssen Sie den FK aus einer der beiden Tabellen entfernen und einen eindeutigen Index auf dem FK desjenigen hinzufügen, der es hält (vielleicht machen es ein Teil des PK?). Aber es wäre weniger verwirrend, alles auf einem Tisch zu haben.

0

Dies ist eine kreisförmige Abhängigkeit. Tabelle AuditReport haben Beziehung zu OversightResults und umgekehrt. Um dies zu vermeiden, können Sie dies als einzelne Tabelle zusammenführen oder Sie können bei Bedarf eine weitere Zuordnungstabelle erstellen. Wenn Sie diese zirkuläre Abhängigkeit spezifisch benötigen, können Sie die Schritte ausführen.

  1. erstellen Tabelle AuditReport ohne FK Bezug auf OversightResults.
  2. Dann erstellen OversightResults und beziehen sich auf AuditReport.
  3. Ändern Sie die Tabelle AuditReport und fügen Sie die FK-Beziehung zu OversightResults hinzu.