代码之家  ›  专栏  ›  技术社区  ›  Derek Adair

对SQL中的列组合应用唯一约束

  •  0
  • Derek Adair  · 技术社区  · 14 年前

    我有一个名为product_attributes的表 MySQL 数据库。它由产品sku(外键)、属性标签和属性值组成。我需要确保sku和属性标签的组合是唯一的。

    示例-

    插入这个将是 合法的

    {001, 'weight', '100 lbs'}
    {001, 'color', 'blue'}
    {002, 'weight', '200 lbs'}
    

    这将是 非法的

    {001, 'weight', '100 lbs'}
    {001, 'weight', '200lbs' }
    

    -如何实施这个约束?
    -我必须使用服务器端语言来执行此操作,还是可以配置数据库来强制执行此操作?
    -这种类型的约束称为什么?

    3 回复  |  直到 14 年前
        1
  •  7
  •   Conrad Frix    14 年前

    尚未对此进行测试,但用于添加唯一键的DDL(数据定义语言)是

    ALTER TABLE foo
    ADD CONSTRAINT UniqueSkuAttribKey UNIQUE (SKU, Attribute)
    

    主键是

    ALTER TABLE foo
    ADD CONSTRAINT PrimaryFooKey Primary (SKU, Attribute)
    
        2
  •  4
  •   Dave    14 年前

    对两行使用唯一约束

    ALTER TABLE product_attributes ADD CONSTRAINT unique_sku_attribute UNIQUE (sku, attribute);
    

    编辑:从唯一索引改为唯一约束。哎呀

        3
  •  3
  •   D'Arcy Rittich    14 年前

    你也可以做 ProductSKU AttributeLabel 一个复合的pk,或者对它们施加一个唯一的约束。两者都能达到你的目的。为了方便起见(或者因为模型层需要代理键),您可能希望使用代理键,在这种情况下,唯一约束是可行的。

    通常,您仍然需要代码来处理应用程序中的异常,而不管您如何处理数据库。