当前位置: 首页 > 面试题库 >

可扩展数据库架构-如何存储可扩展属性值

太叔高义
2023-03-14
问题内容

我们正在使用SQL Server
2008,其中一项要求是在为系统定义的实体上具有可扩展的用户定义属性。例如,我们可能有一个名为Doctor的实体,我们希望系统管理员能够定义通常不在系统中的其他属性。这些属性很可能是链接父表或联接表的查询条件所必需的。

将有定义属性(名称,描述,类型)等的表,但是我的问题是实际数据值的存储。

我不是DBA(只是一个假装成程序员的DBA),但我首先想到的是将它们作为一个类存储在一个通用列中

nvarchar(450)

这将涵盖大多数基本类型,并且仍然允许使用索引,但是我认为我会遇到很多转换类型问题(转换为日期,数字等)以及异常查询问题,因为所有内容都是nvarchar。

因此,我最近的想法是为我们将支持的每种数据类型创建一个列:

ColNVarCharData
nvarchar(450)

ColBitData
bit

ColIntData
int

..依此类推

当用户定义可扩展属性时,他们将选择一种数据类型,然后我们将属性值存储在该类型的该列中。例如,如果他们选择了int,则在此示例中,数据值将存储在ColIntData中,而其他两列将为null。

我认为这解决了转换问题,而不是将每个属性存储为通用类型。此外,我可以根据查询的使用情况为每种类型添加所需的索引。

我倾向于使用此功能,但想知道是否还有其他建议。我已经简单地看过XML数据类型,但是“模式”可能会经常更改,因此我认为这是一个更好的选择。


问题答案:

这里只是与该主题相关的一些SO问题/答案。



 类似资料:
  • 作者:陈希章 发表于 2018年4月7日 前言 此前我有一篇 文章 讲解了Microsoft Graph的一种数据扩展技术—— 开发扩展(Open Extensions),它可以实现在支持的对象(例如用户,组等)上面附加任意的数据。但开放扩展的问题在于,它是基于某个具体对象的,你无法确定两个对象是否具有同样的扩展(即便属性名一样,但也可能其包含的数据完全不同)。如果我们需要对一类对象进行统一的扩展

  • 8.1. 定义访问令牌类型 8.2. 定义新的端点参数 8.3. 定义新的授权许可类型 8.4. 定义新的授权端点响应类型 8.5. 定义其他错误代码

  • 我需要减少从Optaplanner获取结果的延迟。是否可以跨集群中的多个实例(和/或机器)运行作业?我似乎找不到实现这一目标的任何信息/尝试。

  • 有两种方法可以定义访问令牌类型 - 通过在访问令牌类型的注册表中注册。 通过使用唯一的绝对URI(统一资源标识符)作为其名称。 定义新的端点参数 参数名称必须遵守参数名称ABNF(Augmented Backus-Naur Form是一种基于Backus-Naur形式的元语言,由其自己的语法和派生规则组成),参数值的语法必须明确定义。 param-name = 1* name-char name-

  • 本节将会详细介绍VS Code可扩展性的各种功能,并深入到其内部细节。在开始之前,建议回顾之前关于扩展部分以及范例'Hello World'。 查看VS Code扩展运行的最简单方法是通过扩展市场。当你编写好了你的第一个插件后或者准备分享你的定制化信息后,那么你可以把它发布出去,供他人下载并安装。 可扩展性参考文档 在本节中将会讲述以下几个主题: 主题 描述 package.json 扩展清单 每

  • 问题内容: 目前,我有两个几乎相同的架构: 和 它们的唯一区别在于验证:用户不需要名字,姓氏或电话。但是,管理员必须定义这些属性。 不幸的是,上面的代码不是很干,因为它们几乎相同。因此,我想知道是否有可能基于。例如: 显然,这只是伪代码。这样的事情可能吗? 另一个非常相似的问题是,是否有可能基于另一个创建新的架构,并为其添加更多属性。例如: 问题答案: 在其他地方,有人建议使用utils.inhe