首先,这不是一个关于如何在关系数据库中实现继承的问题。
问题:
我有一个有几个子系统的系统,其中可能有几个子系统,等等。我需要创建一个数据库来存储每个系统的配置参数。当没有提供自己的设置时,子系统将从父母那里继承设置。继承基于每个参数,而不是完整的参数集。
基本上..。
存储时的:
- System A-2: **background**: null, **stack-size**: null, **threads**: 150
加载时的:
- System A-2: **background**: white, **stack-size**: 100, **threads**: 150
您将如何实现这一点,以便它也可以以快速的方式加载?
我可以使用NoSql和Sql解决方案。但是我的应用程序将使用C#编写。
提前谢谢。
发布于 2012-07-26 17:14:44
我使用自引用配置表实现了类似于此(在implemented中)的配置表。每个条目将指定系统、父系统和设置名称/值。这允许在保存哪些设置时具有灵活性(而不是使用列作为背景,列用于线程,等等)。只要级别的数量不超过最大递归深度,就可以使用递归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 Fiddle
我不能说这是否是SQL中最有效的方法,而且我从未尝试过NoSql解决方案,但是这样做可以完成任务,并且具有合理的索引性能。
https://stackoverflow.com/questions/11673660
复制相似问题