【问题标题】:How to create a Constraint for 2 columns mysql如何为 2 列 mysql 创建一个约束
【发布时间】:2016-03-14 03:54:40
【问题描述】:

我已经创建了一个包含 3 个表的数据库:
产品
分类
子类别

在我的产品表中,我有一个类别和一个子类别列:

| product_name | category | subcategory|  
----------------------------------------    
| varchar      | int      | int        |

截至目前,类别列引用类别表 ID,子类别列引用子类别 ID。

categories 列有一个 id 和一个 category name 列:

| id | category_name |
----------------------
|int | varchar       |

子类别列有一个 id、子类别和一个父列,父列是引用类别(id)列的外键。

| id | subcategory_name | parent |
---------------------------------
|int | varchar          | int    |

我想知道是否有一种方法可以向产品的“子类别”列添加约束,以便只有当它是父类别的合法子项时才能添加值。

如果这个问题已经回答,请原谅我。我不知道我正在尝试做的事情的正确名称。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    1 - 您可以在插入/更新子猫 id 之前使用程序进行验证

    2 - 或者您可以使用触发器在每个事务之后运行

    3 - 或者您可以重新设计您的类别和子类别表,这取决于您的类别数据的外观。

    例如:

    id   category_name
    ---- -------------
    10   cat 10
    1011 kid of cat 10
    20   cat 20
    2020 kid of cat 20
    

    4 - 如果你不喜欢上面的设计,你也可以这样设计:

    id   category      parent_id
    ---- ------------- -----
    10   cat 10         0
    1010 kid of cat 10  10
    20   cat 20         0
    2020 kid of cat 20  20
    

    【讨论】:

    • 据我了解,我的设计与您的第二个选项相似。我想知道是否有办法对我的产品表的子类别列实施外键限制。例如。如果在 products 表的子类别字段中插入了外键 id,该字段不是输入的类别字段的子字段,则该条目将无效。
    • MySQL 文档对您有帮助吗? dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多