【发布时间】:2012-11-08 16:37:46
【问题描述】:
我有一个名为 Groups 的表格,其中包含primary key = Pkey。在 Group 中有一个递归关联 Parent_group 引用 Pkey 。我将 Parent_Group 定义为关系 Groups 中的外键。我正在使用 MYSQL。
表名:组
+------+-----------+------------+----------+---------------+
| PKey | GroupName | Region | Role | Parent_Group |
+------+-----------+------------+----------+---------------+
| k1 | RootGroup | Jaipur | Admin | NULL |
+------+-----------+------------+----------+---------------+
| k2 | G2 | Alwar | Admin | k1 |
+------+-----------+------------+----------+---------------+
| k3 | G3 | Jaipur | Guest | k3 |
+------+-----------+------------+----------+---------------+
| k4 | G4 | Alwar | Operator| k2 |
+------+-----------+------------+----------+---------------+
创建表查询:
CREATE TABLE IF NOT EXISTS `groups`
(
`PKey` varchar(64) NOT NULL,
`group_name` varchar(64) DEFAULT NULL,
`Region` varchar(128) NOT NULL,
`Role` varchar(128) NOT NULL,
`parent_group` varchar(64) DEFAULT NULL,
PRIMARY KEY (`Pkey`),
KEY `FK_ParentGroup_ChildGroup` (`parent_group`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Groups 表将随我的应用程序一起提供,其中只有一个 RootGroup 元组。
和I want to impose two constraints on table?如下:
-
Parent_group列的新插入行不能有 NULL 值 - 添加一个约束,使
RootGroup行不能被删除。
我想知道,天气可能在 SQL 中(如果 yes 怎么样?)或者我必须在后端系统中处理?
可以用触发器吗?
编辑:我想对表施加额外的约束,以便新的插入元组不能指向自身。例如
mysql> INSERT INTO Employee VALUES ("8", "H", "BOSS", "8");
Query OK, 1 row affected (0.04 sec)
应该失败?
【问题讨论】:
-
1) 将该字段定义为“非空”。 2) 禁止删除该特定记录的触发器。
-
@Marc B :但是对于
RootGroup的值Parent_group is NULL怎么办?我可以让它自己引用吗! -
是的,将其指向自身,但请确保修改任何递归逻辑以检测到这一点,否则您可能最终会一直旋转以试图找到树的根。
-
@MarcB :如何禁止触发?你能解释一下吗?