首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlServer约束依赖于另一个字段值的字段值

SqlServer约束依赖于另一个字段值的字段值
EN

Stack Overflow用户
提问于 2010-09-15 18:47:13
回答 2查看 262关注 0票数 1

作为题目,有没有办法做到这一点?

例如:

代码语言:javascript
复制
DrivingLicence
--------------- 
CanDriveCar       (bool) 
CanDriveMotorbike (bool) 
CanDriveBus       (bool)

你不能在没有汽车牌照的情况下驾驶公共汽车,所以我希望DB抛出一个例外,如果有人试图给没有汽车牌照的人一个公共汽车牌照。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-15 19:01:20

代码语言:javascript
复制
ALTER TABLE dbo.DrivingLicence ADD CONSTRAINT
    NameOfConstraint CHECK (CanDriveBus=0 OR CanDriveCar=1)
票数 2
EN

Stack Overflow用户

发布于 2010-09-15 19:18:06

Martin给了你一个可能的答案,但从你的帖子中并不清楚你的数据模型是什么:汽车牌照和公共汽车牌照是否具有相同的牌照号码?换句话说,如果我有一张汽车执照,并且学习驾驶公共汽车,我是得到第二个执照,还是只是在我现有的执照上盖上印章?

如果它们是单独的许可证,那么我假设它们在您的表中是单独的行,因为表的主键是--希望是!-- LicenceNumber。在这种情况下,检查约束将不起作用,因为它们只应用于一行中的值;在添加新的许可证时,您需要使用触发器来检查驱动程序已经拥有哪些许可证。

所以你的选择是:

  1. 驱动程序只能有一个具有唯一编号的许可:使用CHECK constraint
  2. Drivers可以拥有具有不同编号的不同类型的多个许可:使用触发器
  3. 比这复杂得多:使用存储的proc或应用程序代码插入新许可

你的帖子建议是1,但它有点不清楚。即使是这样,您也可以考虑另一个名为DrivingLicenceQualifications的表或其他表:如果一个许可证可以有多个限制条件,并且您希望在将来添加新的限制条件,那么这将更加灵活。

仅供参考,MSSQL中没有布尔数据类型,也许你的意思是位?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3716868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档