位置: 编程技术 - 正文

SQL Server约束增强的两点建议(sql server 约束)

编辑:rootadmin
在许多情况下,对外键使用更复杂的逻辑表达式是非常有用的。 此外,在某些情况下能够在索引视图创建约束也将非常实用。 我将举例说明,同时我希望针对此文的投票链接会尽快加上。当外键中需要更为复杂的逻辑表达式时 考虑下面的简单常识: 您的设备的最大电流不能超过您插入到它的电路的最大电流。 假设下面的表存储电路和设备数据: It would be very convenient to issue a simple command and implement this business rule: 一个非常简便的命令就可能实现这个业务规则: ALTER TABLE Data.Devices ADD CONSTRAINT FK_Devices_Curcuits FOREIGN KEY(CurcuitID, MaximumCurrent) REFERENCES Data.Curcuits(CurcuitID, MaximumCurrent) MATCH ON((Data.Devices.CurcuitID = Data.Curcuits.CurcuitID) AND (Data.Devices.MaximumCurrent <= Data.Curcuits.MaximumCurrent)); However, it is not supported, so I need to use a workaround, one more column and three constraints instead of one, as follows: 然而,该语句并不被支持,所以必须采用其他办法——多增加一列约束,使用3个而不是1个约束,如下所示: ALTER TABLE Data.Curcuits ADD CONSTRAINT UNQ_Curcuits UNIQUE(CurcuitID, MaximumCurrent); GO ALTER TABLE Data.Devices ADD CurcuitMaximumCurrent INT NULL; GO ALTER TABLE Data.Devices DROP CONSTRAINT FK_Devices_Curcuits; GO ALTER TABLE Data.Devices ADD CONSTRAINT FK_Devices_Curcuits FOREIGN KEY(CurcuitID, CurcuitMaximumCurrent) REFERENCES Data.Curcuits(CurcuitID, MaximumCurrent) ON UPDATE CASCADE; GO ALTER TABLE Data.Devices ADD CONSTRAINT CHK_Devices_SufficientCurcuitMaximumCurrent CHECK(CurcuitMaximumCurrent >= MaximumCurrent); GO You can verify that the constraints work: 你可以验证该约束有效: INSERT INTO Data.Devices(DeviceID, CurcuitID, MaximumCurrent, CurcuitMaximumCurrent, Description) SELECT 1, 1, , , 'Electric car charger' Msg , Level , State 0, Line 1 The INSERT statement conflicted with the CHECK constraint "CHK_Devices_SufficientCurcuitMaximumCurrent". The conflict occurred in database "Test", table "data.Devices". The statement has been terminated. INSERT 语句和CHECK约束"CHK_Devices_SufficientCurcuitMaximumCurrent"发生冲突。 该冲突发生在数据库"Test"的"data.Devices"表。 该语句被终止执行。 As you have seen, the implementation of a very simple and very common business rule is quite involved, because such business rules are not directly supported by the database engine. 可以看出,一个非常简单而普通的业务规则实现起来也相当繁杂,因为数据库引擎并不直接支持这种业务规则。 When you want to create constraints on indexed views 在索引视图上创建约束 Even when your database guarantees that “the maximum current of your device cannot exceed the maximum current of the circuit you plug it into”, it is not good enough. Consider the following sample data: 尽管数据库保证“您的设备的最大电流不能超过您插入到它的电路的最大电流”,但这还不够。请看下列示例数据: INSERT INTO Data.Devices(DeviceID, CurcuitID, MaximumCurrent, CurcuitMaximumCurrent, Description) SELECT 2, 1, , , 'ShopVac'; INSERT INTO Data.Devices(DeviceID, CurcuitID, MaximumCurrent, CurcuitMaximumCurrent, Description) SELECT 3, 1, , , 'Miter Saw'; The database structure allows to plug more than one device into a circuit, which is correct, but if you turn both devices on, their combined maximum current exceeds the circuit's maximum current. To enforce this business rule, it would be natural to create an indexed view, so that the database guarantees that the totals are always correct: 数据库中的数据表明可以插入一个以上的设备到电路,这没有错,可是当所有的设备都打开时,它们的最大电流之和会超过电路最大电流。为了加强这个业务规则,很自然的会创建一个索引视图以使数据库保证电流之和总是正确的。 CREATE VIEW Data.TotalMaximumCurrentPerCircuit WITH SCHEMABINDING AS SELECT d.CurcuitID, c.MaximumCurrent AS CircuitMaximumCurrent, SUM(d.MaximumCurrent) AS TotalMaximumCurrent, COUNT_BIG(*) AS NumDevices FROM Data.Devices d JOIN Data.Curcuits c ON d.CurcuitID = c.CurcuitID GROUP BY d.CurcuitID, c.MaximumCurrent; GO CREATE UNIQUE CLUSTERED INDEX Data_TotalMaximumCurrentPerCircuit ON Data.TotalMaximumCurrentPerCircuit(CurcuitID); GO If I could create a check constraint on that indexed view, I would be all set: 如果能在该索引视图上创建一个约束,我将进行这样的设置: ALTER VIEW Data.TotalMaximumCurrentPerCircuit ADD CONSTRAINT CHK_TotalMaximumCurrentPerCircuit_ValidCurcuit CHECK(TotalMaximumCurrent <= CircuitMaximumCurrent) Instead, I need to use triggers or rather contrived kludges. A built in native support for such quite common business rules would increase the usefulness of SQL Server. 实际上,我必须使用触发器或者精心拼凑Check约束来实现。如果数据库内置支持这种相当普遍的业务规则,那将会增加SQL Server的实用性 。

推荐整理分享SQL Server约束增强的两点建议(sql server 约束),希望有所帮助,仅作参考,欢迎阅读内容。

SQL Server约束增强的两点建议(sql server 约束)

文章相关热门搜索词:sql server 约束,sqlserver添加约束代码,sql server添加约束语句,sql添加约束范围,sql添加约束范围,sql添加约束范围,sqlserver增加约束,sqlserver增加约束,内容如对您有帮助,希望把文章链接给更多的朋友!

SQL Server 更改DB的Collation 执行以下SQL,即OK咯叻!!SQL:alterdatabase数据库名称SQL_Latin1_General_CP1_CI_AS

Oracle g各个帐号的访问权限、登录路径、监控状态命令查询等等 1。帐号和口令设置要选择用户SYS、SYSTEM、DBSNMP、SYSMAN使用相同的口令,那就选择所有账户使用同一口令。BI用户,口令ch*****,SCOTT用户。以上全部为

SQL Server的复制功能 但我觉得这个功能用来设置备份服务器或测试服务器也很有用,在一台机上发布服务,可以在其它机子的SQL里订阅,根据你的发布的条件不同,可以做

标签: sql server 约束

本文链接地址:https://www.jiuchutong.com/biancheng/349063.html 转载请保留说明!

上一篇:MSSQL SERVER中的BETWEEN AND的使用(sqlserver msdb)

下一篇:SQL Server 更改DB的Collation(sql server 更改字段数据类型)

  • 抄税 报税 清卡
  • 房地产小规模纳税人预缴税款如何填申报表
  • 实收资本何时交税
  • 发生额对照表
  • 公司购车预计净残值率怎么计算
  • 进口环节增值税是中央税还是地方税
  • 货币形式投资的特点是
  • 餐饮消费方式
  • 发票丢了企业所得怎么办
  • 产品售后维修产品介绍
  • 影院分成为什么那么高
  • 补交注册资本的法律规定
  • 岗位津贴一定要发吗
  • 维修费增值税怎么开
  • 怎么进行利润招财
  • 稿酬所得个人所得税计算方法
  • 分包与转包的区别 法院
  • 坏账准备怎么冲回
  • 高新技术企业注销后退回补贴
  • 自然灾害造成的存货净损失计入什么科目
  • 契税和印花税入哪个科目
  • 水土保持补偿费收费标准
  • 企业汇算清缴弥补以前年度亏损后还需退税
  • 公司买回来做样衣的服装怎么做会计分录?
  • 留用员工培训费怎么入账
  • 去年的发票可以红冲重新开具吗?
  • 民间非盈利组织会计信息的使用者
  • 不征税收入与免税收入的区别
  • 戴尔电脑设置u盘
  • 在电脑中设置一键换机
  • 购买生产用品计入什么科目
  • HTML常用标记
  • 前端经典面试题讲解
  • 核心书评价格
  • 我初次尝试制作的英文怎么写
  • 完美怎么用
  • 投资性房地产在资产负债表中的列示
  • pwd命令的用法
  • 员工内部罚款能不能抵扣个税
  • 什么是服务型
  • 股东投资款超过实收资本怎么处理
  • 停车费定额发票有效期是多久
  • 单一窗口出口报关流程
  • 三方合同如何解除
  • 减免税款属于政府补助利得吗
  • 工装算劳保用品还是办公费
  • 以前年度费用退回
  • 发货环节产生的影响
  • 开办费的最新账务处理会计视野
  • 土地出让金抵减增值税
  • 本年利润每个月需要结转吗
  • 应收账款无法收回说明模板
  • 以前年度长期股权投资漏记调整
  • 厂家核销费用直接扣除吗
  • 技术开发技术服务属于什么行业
  • 小规模纳税人购进税控设备如何抵扣
  • 事业单位不允许办企业是哪个文件要求的
  • 私营企业固定资产法律制度
  • mysql中mysqldump
  • sql集合包含关系
  • win7系统如何关闭开机自动启动软件
  • centos 软件源
  • 产品密钥需要购买吗
  • win7怎么设置u盘启动为第一启动项
  • linux修改时间和日期的方法
  • win7系统怎么修改开机密码
  • Win10 Build 14279正式推送 更新后QQ可能会崩溃
  • JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)
  • asm指令
  • unity基础教程
  • Linux中的host命令应用实例详解
  • 非法文件名是什么
  • shell脚本遍历
  • 深入理解android卷1 pdf
  • python 系统日期
  • 山东省省级政务服务区有哪些
  • 在深圳,企业房贷怎么办
  • 税务逾期未申报是什么意思
  • 安康国税局电话号码
  • 惠济区第五中学怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设