2016-04-28 63 views
-1

我根據客戶要求創建了幾個,我有一個聲明,我想知道它是否會失敗,或者如果我需要添加一些代碼行,所以它不會失敗。表創建聲明

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

正如你可以看到表設計審覈報告表已經OR_ID作爲外鍵和監督結果表有它作爲一個主鍵和監督結果具有AR_ID作爲一個外鍵和審計報告有它作爲主鍵。由於聲明現在正確,審計報告表將無法創建,因爲OR_ID作爲主鍵的表尚未創建?

+0

請提供查詢執行結果 – piyushj

+0

試一試會回答這個問題,但嘿。是。這是一個循環依賴。您可能必須在創建後添加其中一個約束來解決此問題。儘管我質疑這是否有意義。一個'OversightResult'只有一個'AuditReport'嗎?如果是的話,爲什麼不把它們放在同一張桌子上呢?如果否,那麼預想的鏈接是不可能的。另外我猜'OR_Recommdations'是一個錯字。 –

+0

您可以嘗試將它們創建爲臨時表(在名稱前加一個#),這樣您將看到任何錯誤而無需實際製作表。請記住,您需要在最後刪除表格,否則下次您將重新創建相同的表格。 –

回答

0

如果這真的是1:1的關係,那麼把它們全部放在一張表中。如果你願意,你可以再在該表中創建了一些看法,以分離出結果,例如:

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 

,它不應該太難使這是一個索引視圖如果需要的話要麼...

否則,您需要從兩個表中的一個表中刪除FK,並在保留它的FK上添加一個UNIQUE索引(可能使其成爲PK的一部分?)。但是把它全部放在一張桌子上就不那麼令人困惑了。

0

這是循環依賴。表AuditReportOversightResults有關係,反之亦然。最好避免這種情況,可以將它合併爲一個表,或者如果需要,可以創建另一個映射表。 如果您特別要求此循環依賴關係,則可以按照以下步驟操作。

  1. 創建表AuditReportOversightResults沒有FK關係。
  2. 然後創建OversightResults並涉及AuditReport
  3. 修改表AuditReport並將FK關係添加到 OversightResults