首先,这不是关于如何在关系数据库中实现继承的问题。
问题:
我的系统有多个子系统,可能有其他几个子系统,依此类推。 我需要创建一个数据库来存储每个系统的配置参数。子系统将在未提供其自己的设置时继承父项的设置。继承基于每个参数而不是它的完整集合。
基本上...
存储时:
加载时:
你将如何实现这一点,所以它也可以快速加载?
我愿意使用NoSql和Sql解决方案。但我使用它的应用程序将用C#编写。
提前致谢。
答案 0 :(得分:1)
我之前(在MS Sql Server中)使用自引用配置表实现了类似的功能。每个条目都将指定系统,父系统和设置名称/值。这允许围绕保存设置的灵活性(而不是具有背景列,线程列等)。只要级别数不超过最大递归深度,您就可以使用递归CTE计算给定系统的设置。作为一个开始的地方:
CREATE TABLE Configuration (
SystemId varchar(30),
ParentSystemId varchar(30),
Name varchar(30),
Value varchar(30)
)
并检索系统的配置:
;WITH SystemConfig (Id, ParentId, Name, Value, Rank) AS (
SELECT SystemId, ParentSystemId, Name, Value, 1
FROM Configuration C
WHERE SystemId = @SystemId
UNION ALL
SELECT D.SystemId, D.ParentSystemId, D.Name, D.Value, Rank + 1
FROM Configuration D
INNER JOIN SystemConfig S ON S.ParentId = D.SystemId
)
SELECT DISTINCT K.Name, V.Value
FROM SystemConfig K
CROSS APPLY (
SELECT TOP 1 Value
FROM SystemConfig G
WHERE K.Name = G.Name
ORDER BY Rank
) V
我不能说这是否是SQL中最有效的方法,而且我从未尝试过NoSql解决方案,但这可以完成工作并且合理的索引表现良好。