我如何强制执行的数据完整性的规则,在我的数据库?
-
01-07-2019 - |
题
我设计的这个系列的课程和摘要(MustInherit)类的...
这是数据库表,我要去的地方储存的所有此...
尽Microsoft SQL服务器数据库知道,所有这些都是可以为null("允许使用空值")列。
但是真的,那取决于类存储的有:LinkNode,HtmlPageNode,或CodePageNode.
规则可能是这样的...
我如何强制执行这类数据的完整性规则在我的数据库?
更新:关于这个单一表格的设计...
我仍然是试图在最终结构。
我最初开始与许多小表与几乎为零nullalbe领域。
这是最好的数据库模式对我的导航?
和我学到了皇宫SQL IsDiscriminator财产。
什么是最好的方式来处理一对一关系在SQL?
但是然后我了解到皇宫SQL唯一支持单一的表格继承。
可以一个皇宫的SQL IsDiscriminator列不能承受?
现在我想处理它与收集类和抽象的课程。
请帮助我我的。净抽象的课程。
解决方案
使用检查制约。这些允许使用任何种类的布尔逻辑(包括在其他表中的数值),以允许或拒绝的数据。
从 丛书 网站:
你可以创建一个检查约束 任何逻辑(Boolean)的表达, 返回真正的或虚假的基础上 逻辑运算符。对于以前的 例如,合乎逻辑的表达的是:薪金>=15000和薪水 <=100000.
其他提示
看起来你正在尝试 单表继承 模式,这一模式复盖的对象关系的结构模式部分的书 模式的企业应用程序结构.
我会推荐的 课表继承 或 具体表继承 模式,如果你要执行数据的完整性,通过SQL表的约束。
虽然这不会是我的第一个建议,你仍然可以使用单个表继承,只是强制执行限制通过存储的过程。
你可以设置一些 插入/更新触发器.只是检查这些领域是 空 或 notnull, 和拒绝insert/update操作,如果需要的。这是一个很好的解决方案如果要存储的所有数据,在相同的表格。
你可以创建也创建一个 唯一的表中为每个课程 为好。
有一个独特的表对每种类型的节点。
为什么不只做你们的建筑强制执行的数据的完整性对于其自己的类型?
编辑
在这种情况下,可以a)使用逻辑约束(参见下文)或b)存储程序做插入/编辑(一个很好的想法不论),或者c)再次,只要这类强制执行数据的完整性。
的混合物C&B会活动的过程中,我采取。我会具有独特的存储程序添加/编辑每个节点类型(即Insert_Update_NodeType)以及使类进行数据验证之前,节省的数据。
就个人而言,我始终坚持把数据完整性上的代码表本身可以通过一个触发或复制约因素。为什么是你不能保证只用户的接口更新插入或删除记录。也不能保证有人可能不会写第二sp得到周围限制在原sp不理解的实际数据的完整性的规则或甚至写信,因为他或她不知道存在sp的规则。表往往是受DTS或SSIS包,动态查询的用户接口或通过查询分析器或查询窗口,或者甚至通过工作计划运行的代码。如果你不把数据完整性的代表级别,迟早你的数据将不具有完整性。
它可能不是答案,你想听到的,但最好的方式,以避免逻辑上的不一致性,你真的想看 数据库正常化
斯蒂芬 答案是好的。 但如果你必须,你可以添加一个检查约束的HtmlOrCode列和其他列其需要改变。
我不熟悉SQL服务器,但我知道与Oracle你可以指定的约束,你可以用它来做什么你都在寻找的。我敢肯定你可以定义限制在SQL服务器还虽然。
编辑:我发现这个 链接 这似乎有很多的信息,那种长,但也许值得一读。
执行中的数据完整性的数据库 基本上,有四个主要类型的数据完整性:实体领域,引用和用户定义。
实体完整性适用在行水平;域完整性适用于所列水平,并参照完整性适用在本表格的水平。
实体的完整性,确保表格中没有任何重复的行和独特标识。
域完整性的需要的一组数据的价值下降的具体范围内(域)的顺序是有效的。换句话说,域的完整性界定了可允许的条目为赋予列通过限制数据的类型、格式,或者范围的可能值。
引用完整性感到关切的是,与保留之间的关系表同步。
@扎克:你还可以检查出这个博客,以了解更多详细信息有关数据的完整性,强制执行,在这里- https://www.bugraptors.com/what-is-data-integrity/
SQL服务器什么都不知道关于你的课程。我认为你只有为了执行这一通过使用工厂的类构造/解构所有这些对你并保证你是在传递正确的价值观根据的类型。
从技术上讲这不是"强制执行规则在数据库",但我不认为这可以在一个单一的表格。领域接受空值,或者他们不知道。
另一个想法可能是探索SQL职能和存储程序,做同样的事情。但你不能强制执行的一个领域是没有空的一个记录和NULL为下一个。这是你的业务层/工厂工作。
你有没有试过 它能够?这是更成熟产品,比的实体的框架。它是免费的。