![]() |
1
2
在表上使用检查约束。这些允许您使用任何类型的布尔逻辑(包括表中的其他值)来允许/拒绝数据。 从 Books Online 地点:
|
![]() |
2
2
看起来你在尝试 Single Table Inheritance 模式,这是本书“对象关系结构模式”一节所涵盖的模式。 Patterns of Enterprise Application Architecture . 我会推荐 Class Table Inheritance 或 Concrete Table Inheritance 如果您希望通过SQL表约束强制数据完整性,则使用模式。 尽管这不是我的第一个建议,但您仍然可以使用单表继承,并通过存储过程强制执行约束。 |
![]() |
3
2
你可以设置一些 插入/更新触发器 . 检查这些字段是否 无效的 或 非零 ,并根据需要拒绝插入/更新操作。如果要将所有数据存储在同一个表中,这是一个很好的解决方案。 您还可以创建 每个类的唯一表 也。 |
![]() |
4
2
为每种类型的节点都有一个唯一的表。 为什么不让正在构建的类为其自身类型强制数据完整性呢?
编辑 在这种情况下,您可以a)使用逻辑约束(见下文)或b)存储过程执行插入/编辑(不管怎样,这是一个好主意),或者c)再次执行,只需使类强制实现数据完整性。 我参加的活动将是C&B的混合体。对于每个节点类型(即insert_update_nodeType),我将拥有唯一的添加/编辑存储过程,并使类在保存数据之前执行数据验证。 |
![]() |
5
2
我个人总是坚持通过触发器或检查约束将数据完整性代码放在表本身上。原因是您不能保证只有用户界面才能更新插入或删除记录。您也不能保证,在不了解实际数据完整性规则的情况下,有人可能不会编写第二个SP来绕过原始SP中的约束,甚至不会编写它,因为他或她不知道具有这些规则的SP的存在。表通常受dts或ssis包、用户界面或通过查询分析器或查询窗口进行的动态查询,甚至受运行代码的计划作业的影响。如果您不将数据完整性代码放在表级别,那么您的数据迟早将不具有完整性。 |
![]() |
6
1
这可能不是你想听到的答案,但是避免逻辑不一致的最好方法,你真的想看看 database normalisation |
![]() |
7
1
Stephen's 答案是最好的。 但是如果必须这样做,您可以添加一个检查约束:htmlorcode列和其他需要更改的列。 |
![]() |
8
1
我对SQL Server不太熟悉,但我知道,对于Oracle,您可以指定可以用于执行所需操作的约束。不过,我很确定您也可以在SQL Server中定义约束。 编辑:我找到了这个 link 这似乎有很多信息,有点长,但可能值得一读。 |
![]() |
9
1
在数据库中强制数据完整性 基本上,数据完整性有四种主要类型:实体、域、引用和用户定义。 实体完整性应用于行级别;域完整性应用于列级别,引用完整性应用于表级别。
@扎克:你也可以查看这个博客来阅读关于数据完整性强制的更多细节,这里- https://www.bugraptors.com/what-is-data-integrity/ |
![]() |
10
0
SQL Server对您的类一无所知。我认为您必须通过使用一个工厂类来实现这一点,该类为您构造/解构所有这些内容,并确保根据类型传递正确的值。 从技术上讲,这不是“在数据库中强制执行规则”,但我不认为这可以在单个表中完成。字段要么接受空值,要么不接受空值。 另一个想法可能是研究执行相同操作的SQL函数和存储过程。但不能强制一个字段不为空(对于一条记录)和空(对于下一条记录)。这是您的业务层/工厂工作。 |
![]() |
11
0
你试过了吗? NHibernate ?它比实体框架成熟得多。它是免费的。 |
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 7 月前 |
![]() |
Marc Guillot · 记录值时忽略冲突 8 月前 |
![]() |
Fachry Dzaky · 正确使用ROW_NUMBER 8 月前 |
![]() |
TriumphTruth · 从满足特定条件的数据集中选择1行 8 月前 |