如何使用索引视图和一个只有2行的表限制业务规则
作者:网络转载 发布时间:[ 2012/8/29 10:53:38 ] 推荐标签:
假设一个业务规则规定某些情况不允许存在.并且不允许使用外键进行限制,此时Instead of 触发器可以作为备选答案,但是通常这类触发器在以后带来的麻烦会多于其带来的便利。还有一种解决方式是使用包含索引的索引视图与只有一个两行的dummy table进行连接。
假设你有如下两个表,地区和办事处
Region表
RegionId |
RegionName |
IsActive |
EffectiveDate |
ExpirationDate |
1 |
East |
1 |
1/1/2009 |
NULL |
2 |
West |
1 |
1/1/2009 |
NULL |
3 |
North |
1 |
1/1/2009 |
NULL |
4 |
South |
1 |
1/1/2009 |
NULL |
5 |
Antarctica |
1 |
1/1/2009 |
NULL |
Office表
RegionId |
RegionId |
OfficeName |
IsActive |
EffectiveDate |
ExpirationDate |
1 |
1 |
New York |
1 |
1/1/2009 |
NULL |
2 |
2 |
Los Angeles |
1 |
1/1/2009 |
NULL |
3 |
3 |
Minneapolis |
1 |
1/1/2009 |
NULL |
4 |
4 |
Atlanta |
1 |
1/1/2009 |
NULL |
5 |
5 |
Byrd Station |
1 |
1/1/2009 |
NULL |
你如何保证活动的(IsActive=1)的Office只属于活动的Region?
上面提到的表需要某种参照完整性.RegionId是Office表的外键,Check约束保证了在ExpirationDate不为Null的情况下,永远不会是1.但是我们如何防止IsActive的的Office属于IsActive=0的Region呢?我们可以重新设计表或是使用Instead of触发器,但更方便的做法是使用一个含有索引的索引视图与一个两行的哑表进行连接。
DuplicateRows table
DuplicateRows表包含两行,如下
DuplicateRowIndex |
DuplicateRowValue |
1 |
Duplicate Row |
2 |
Duplicate Row |
对于这个表的要求是这个表至少含有两行,其结构和内容并不重要。这个表甚至也可以是只有一列的表并且每行的值不一样。而我这里用这种方式命名是因为“Duplicate Row”这个名字看起来不容易产生混淆,并且这样的命名也不会使得其它DBA删除这个表。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11