在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