需要有关如何为以下场景设计数据库的最佳方法的建议:
以下DB结构exmaple(这不是真正解释问题)
File
(
Id INT PRIMARY KEY...,
Name VARCHAR(),
TypeId SMALLINT,
...
/*other common fields*/
)
FileContent
(
Id INT PRIMARY KEY...,
FileId FOREIGN KEY REFERENCES File(Id) NOT NULL ON DELETE CASCADE UNIQUE,
Content VARBINARY(MAX) NOT NULL,
)
Book
(
Id INT PRIMARY KEY...,
Name VARCHAR(255),
Author VARCHAR(255)
...
CoverImageId FK REFERENCES File(Id),
)
BookPageType
(
Id TINYINT PRIMARY KEY...,
Name VARCHAR(50),
)
BookPage
(
Id INT PRIMARY KEY...,
TypyId TINYINT FOREIGN KEY REFERENCES BookPageType(Id),
BookId INT FOREIGN KEY REFERENCES Book(Id) ON DELETE CASCADE,
Name VARCHAR(100),
CreatedDate DATETIME2,
...
/*other common fields*/
)
BookPage1
(
Id PRIMARAY KEY REFERENCES BookPage(Id) NOT NULL ON DELETE CASCADE,
FileId PRIMARAY KEY REFERENCES File(Id)
...
/* other specific fileds */
)
...
BookPageN
(
Id PRIMARAY KEY REFERENCES BookPage(Id) NOT NULL ON DELETE CASCADE,
ImageId PRIMARAY KEY REFERENCES File(Id),
...
/* other specific fileds */
)
现在的问题是我想要删除包含所有页面和数据的Book(并且它与删除级联一起使用),但是如何使级联删除相关文件(1对1 relentionship)。 在这里,我看到以下方法:
先谢谢
答案 0 :(得分:0)
如果出现这样的必要,可能看起来你需要重构你的基础。 你说这个例子不是真的,我不会问N页表格虽然很奇怪。如果并非所有文件都具有1对1的关系,那么您只需删除其他图书未引用的文件,这听起来像是触发器的作业。
答案 1 :(得分:0)
所以你定义的是BookPage
和File
之间的多对多关系。这是BookPage
和BookPageN
之间的一对多关系,然后是File
和BookPageN
之间的一对多关系的结果。要在文本中获得您想要的关系,您需要将关系转为指向BookPageN
到File
。也许您可以找到一种方法将它们合并到一个表中,而不是拥有这么多BookPageN
个表。也许只使用BookPage
表。只允许可选字段的空值。