首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建数据继承数据库?

如何创建数据继承数据库?
EN

Stack Overflow用户
提问于 2012-07-26 16:18:46
回答 1查看 130关注 0票数 2

首先,这不是一个关于如何在关系数据库中实现继承的问题。

问题:

我有一个有几个子系统的系统,其中可能有几个子系统,等等。我需要创建一个数据库来存储每个系统的配置参数。当没有提供自己的设置时,子系统将从父母那里继承设置。继承基于每个参数,而不是完整的参数集。

基本上..。

存储时的

  • 系统A:背景:白色,堆栈大小:100,线程:50
    • 系统A-1:背景:蓝色,堆栈大小:null,线程:null
      • 系统A-1-1:后台:null,堆栈大小:10,线程:null

代码语言:javascript
复制
- System A-2: **background**: null, **stack-size**: null, **threads**: 150

加载时的

  • 系统A:背景:白色,堆栈大小:100,线程:50
    • 系统A-1:后台:蓝色,堆栈大小:100,线程:50
      • 系统A-1-1:后台:蓝色,堆栈大小:10,线程:50

代码语言:javascript
复制
- System A-2: **background**: white, **stack-size**: 100, **threads**: 150

您将如何实现这一点,以便它也可以以快速的方式加载?

我可以使用NoSql和Sql解决方案。但是我的应用程序将使用C#编写。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-26 17:14:44

我使用自引用配置表实现了类似于此(在implemented中)的配置表。每个条目将指定系统、父系统和设置名称/值。这允许在保存哪些设置时具有灵活性(而不是使用列作为背景,列用于线程,等等)。只要级别的数量不超过最大递归深度,就可以使用递归CTE计算给定系统的设置。作为一个起点:

代码语言:javascript
复制
CREATE TABLE Configuration (
    SystemId varchar(30), 
    ParentSystemId varchar(30), 
    Name varchar(30), 
    Value varchar(30)
)

并检索系统的配置:

代码语言:javascript
复制
;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解决方案,但是这样做可以完成任务,并且具有合理的索引性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11673660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档