【问题标题】:SQL Server Check Constraint InquirySQL Server 检查约束查询
【发布时间】:2009-07-17 15:49:41
【问题描述】:

我有一个存储付款的表,并且想要确保付款方式是信用卡,那么卡类型字段应该是 IN('Visa'、'MasterCard'、'Discover'、'American Express'),但是如果付款方式不是信用卡,则卡类型字段应为 NULL。

检查约束是否允许我使用这样的语句:

(method = 'CC' AND cardType IN ('Visa', 'MasterCard', 'Discover', 'American Express'))
OR
(method != 'CC' AND cardType = NULL)

我可能完全不了解这个,因为约束可能只用于检查 1 个字段(不确定)。

此外,如果允许这样的声明,是否可能会对性能产生不利影响?

编辑:我计划最终创建一个 cardType 字段并在我们的支付表中使用 cardType 作为外键...这只是我在此期间正在考虑做的事情

【问题讨论】:

    标签: sql-server constraints


    【解决方案1】:

    为什么不只是将外键指向另一个表并允许空值?

    更好的办法是在另一个表中添加一个卡片类型代码,并存储一个密钥。

    【讨论】:

    • +1 - 绝对使用 CardType 表来规范化结构以供参考。例如使用“美国运通”进行 50,000 次付款,即当前架构的 800,000 字节,而标准化方法则超过 50,000 字节
    • 我们计划走这条路。这是我正在使用的现有结构,直到我可以创建新的卡片类型表并更新我正在考虑使用检查约束的现有记录
    • 有时您更喜欢常量值而不是另一个表,例如映射到应用程序中的枚举值。
    • @Shimmy - 您仍然可以在您的应用程序中使用 azn 枚举,并为完整的描述性文本提供外键表。这实际上是我在我维护的主应用程序中所做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多