外键引用本身

时间:2014-01-03 18:41:16

标签: mysql database database-design pdo schema

我想为类别创建一个表,如果parent_id为0,那么该类别没有父类。否则,任何类别都可以是另一个类别的父级:

CREATE TABLE categories (
  cat_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  parent_id INTEGER UNSIGNED NOT NULL DEFAULT 0,
  title VARCHAR(100) NOT NULL,
  valid TINYINT(1) UNSIGNED NOT NULL DEFAULT 1,

  PRIMARY KEY(cat_id),
  FOREIGN KEY (parent_id)
    REFERENCES categories(cat_id)
);

尝试插入新值时的问题是:

  

SQLSTATE [23000]:完整性约束违规:1452无法添加或   更新子行:外键约束失败   (testcategories,CONSTRAINT categories_ibfk_1外国   KEY(parent_id)参考categoriescat_id))

我认为这意味着parent_id不能为0,因为不存在具有该值的cat_id。我怎样才能解决这个问题或更好地设计我的桌子?

1 个答案:

答案 0 :(得分:2)

更改表格,以便parent_id可以为NULL并使用NULL代替0来代表顶级类别。

ALTER TABLE categories
  MODIFY COLUMN parent_id INTEGER UNSIGNED NULL DEFAULT NULL;