我根据客户的要求创建了一些,我有一个声明,我想知道它是否会失败,或者我是否需要添加一些代码行以便它不会失败。
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作为外键,而Oversight Results表将其作为主键,而Oversight结果将AR_ID作为外键,审计报告将其作为主键。正如声明现在所说,审计报告表是否无法创建,因为尚未创建以OR_ID作为主键的表?
答案 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的一部分?)。但是只要把它放在一张桌子上就不那么容易混淆了。
答案 1 :(得分:0)
这是循环依赖。表格AuditReport
与OversightResults
有关,反之亦然。最好避免这种情况,您可以将其合并为单个表,或者如果需要,还可以创建一个映射表。
如果您需要特定的循环依赖关系,那么您可以按照步骤进行操作。
AuditReport
没有FK关系的表OversightResults
。OversightResults
并与AuditReport
相关联。AuditReport
并添加FK关系
OversightResults
。