Csharp/C#教程:在sql中查询数据字典的最佳方法分享


在sql中查询数据字典的最佳方法

对于我正在设置的项目,我需要一个非常动态的数据结构。 我打算存储我没有定义的记录。 一条记录可能包含5列,另一条记录可能包含10列。

为了支持这一点,我想使用包含以下列的表:

ResultId RecordId RecordTypeId键值

这支持所有可能的方案,但我做了几个问题。

这将使用SQL2008R2 Express后端在.NET 4,C#中编​​码。 我正在寻找一些最佳实践。

更新! 为了澄清一点:我需要存储来自不同的,未知的查询的数据的结果集。 我不知道将会有多少查询定义或它们的外观。 此数据库中的数据仅用于处理。 用户甚至不知道这些表存在,没有输入,也不会有任何报告或任何数据以任何方式击中屏幕。 结果集用于通过代码与其他结果集进行比较。 我需要的是一种高度动态的方式来存储这些记录,这些记录在涉及大量记录时仍然可以执行。

我想到的另一个选择是:

ResultId RecordId field1(sql_variant)field2(sql_variant)field3(sql_variant)field4(sql_variant)…

这是一个更好的主意吗?

我知道这不回答这个问题,但我不能不发布(尽管我很可能会被投票)。 它说明了这一点。 直接来自每日WTF:

这是我的第二次面试,它开启了非常对话。

“我们正在考虑在数据库中存储表名和列,”采访中说,“这是一个浮动的想法。”

我回答说,“而不是创建表格并根据数据的结构存储数据?”

“是啊!” 他的眼睛亮了起来,“那么我们就不必定义结构或任何其他混乱!”

我想知道这是某种考验。 “你会怎么做报道?难道不是很尴尬吗?”

“我们可以从前端做到这一点。”

“也许,”我说,“但它不需要很多代码吗?而且速度非常慢。”

“如果我们使用哈希表,那就不行了!”

“好吧……数据完整性,外键,那种事情怎么样?”

他变得越来越防守,“这一切都来自前端。”

“我想,但这都需要大量的代码和各种复杂的SQL查询。如果你改变数据库并不是那么糟糕 – ”

“不,”他打断道,“我们会使用数据访问层将其抽象为规范化的数据结构。”

“你的意思是……像桌子一样?”

两天后,我的招聘人员告诉我,他们拒绝了我作为候选人,因为我不够技术。 虽然我不知道他们是否实现了他们的元数据库实现,但我很高兴我永远不会知道。

https://thedailywtf.com/Articles/Three-for-Three,-Recursion-Threads,-and-Wrong-Answer.aspx

看看表syscolumns和相关的表。 这看起来很像你描述的。 但是经过多年的努力,Sybase和微软已经提出了一种可能比你想象的更有效的方法。

要在报表中为每组不同的列使用此function,请创建一个新表来导入数据 – 数据库将为您管理访问权限。 您评论这些表上没有任何标记 – 但是您在模式中保存了哪些信息 – 如果您拥有该数据,那么就可以轻松地在这些SQL表上创建索引。

我不知道您的所有要求,但如果您只是有额外的动态字段,您可能需要查看SQL Server中的XML数据类型:在SQL Server中实现XML 。 这将允许您针对XML数据类型编写SQL查询。

顺便说一下你的建议并不是完全疯狂的想法。 有许多众所周知的文档管理系统使用非常相似的动态模式实现。 要查询数据,您需要构建一个相当复杂的查询。 在您的情况下,您只需按记录ID对记录进行分组,并为您提供所有记录列。

在继续实现其中任何一个之前,请考虑是否有可能使用静态模式实现此function。 这将使您的生活更轻松(在实施时,尤其是在调试应用程序时)。 看一下类表inheritance或具体表inheritance (这些是可以在设计时使用“inheritance”扩展的静态模式)。

上述就是C#学习教程:在sql中查询数据字典的最佳方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/999783.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐