0

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が 1 つだけのアプリケーションと共に出荷されます。RootGroup

そしてI want to impose two constraints on table?、次のように:

  1. Parent_group新しく挿入された行は、列に NULL 値を持つことはできません
  2. RootGroup行を削除できないよう に制約を追加します。

知りたいのですが、SQL 内で可能かどうか (yesどのように?)、またはバックエンド システムで処理する必要がありますか?

トリガーは使えますか?

編集:新しい挿入タプルがそれ自体を指すことができないように、テーブルに追加の制約を課したい。例えば

mysql> INSERT INTO Employee VALUES ("8", "H", "BOSS",   "8");
Query OK, 1 row affected (0.04 sec)

失敗するべきですか?

4

1 に答える 1