我有兩個表。第一個表是數據庫名稱和備份文件的列表。第二張表是所述數據庫的關係,它們是主要的,附件的,通用的和公式化的數據庫,它們一起用作組。一些主數據庫可能與工作組共享其他數據庫(附件,通用和規範)。兩張表,許多與「更新級聯」的外鍵關係
示例數據庫的「銷售」和「市場營銷」是主數據庫,它們共享附件,通用和規範數據庫。另一個主要數據庫「發行」與另外兩個主要數據庫有共同之處,但有其自己的附件和公式。還有其他主要數據庫與支持數據庫有自己的關係。
DatabaseRelationships中的每一列必須存在於數據庫x ref表中。但SQL似乎阻止了這一點。我如何做到這一點?
CREATE TABLE [dbo].[DatabaseNameToFileNameXref](
[DatabaseName] [nvarchar](128) NOT NULL,
[FileName] [nvarchar](2048) NOT NULL,
CONSTRAINT [PK_DatabaseNameToFileNameXref] PRIMARY KEY CLUSTERED
(
[DatabaseName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[DatabaseRelationships](
[PrimaryDatabaseName] [nvarchar](128) NOT NULL,
[AttachmentDatabaseName] [nvarchar](128) NOT NULL,
[CommonDatabaseName] [nvarchar](128) NOT NULL,
[FormularyDatabaseName] [nvarchar](128) NOT NULL,
CONSTRAINT [DatabaseRelationships_PK] PRIMARY KEY CLUSTERED
(
[PrimaryDatabaseName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
有人提出這個問題與「多態性關聯」問題有關。但是,我不相信這是事實。每一列都是一個DatabaseBase,回到外部參照表的鏈接不確定類型。數據庫的類型由DatabaseRelationship表確定:Primary,Attachment等
實際的錯誤信息與FK的「On Update Cascade」有關,它們可能會導致循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION'我現在看到我只能有一個這樣的FK返回到x-ref表;當我嘗試使用相同的更新設置創建第二個FK時,則出現錯誤。否則,無需更新即可使用。
所以真正的問題是,我該如何添加級聯功能?我可以使用其他一些機制嗎?
利用這短短的手,DatabaseRelationship爲DR和DatabaseNameToFileNameXref爲X,則FK的是從DR.PrimaryDatabase到X.DatabaseName,並從DR.AttachmentDatabase到X.DatabaseName,並從DR.CommonDatabaseName到X.DatabaseName,和最後將DR.FormularyDatabaseName設置爲X.DatabaseName。 X表提供恢復數據庫的文件名。災難恢復表描述了數據庫是如何相互關聯的。如果我更改了數據庫的名稱,但是沒有級聯,我必須在X表中爲新名稱創建一個新條目,然後更新DR表中受影響的每一行,然後從X中刪除舊行表,這爲錯誤創造了更多的機會。
爲什麼沒有標識列 – steamrolla
@steamrolla只是折騰的身份,因爲每個表的主鍵並不總是一個好辦法 –
問:?爲什麼沒有標識列 ?答:我一般不要'不喜歡標識列,另外'DatabaseName'和'PrimaryDatabaseName'是唯一的,並且可以很好地作爲各自表的主鍵。 –