如何防止递归层次结构?

时间:2017-12-22 21:26:11

标签: sqlite

如果以下两个表具有特定约束,将会很有帮助:

-- Table: privilege_group
CREATE TABLE privilege_group (
    privilege_group_id integer NOT NULL CONSTRAINT privilege_group_pk PRIMARY KEY AUTOINCREMENT,
    name text NOT NULL,
    CONSTRAINT privilege_group_name UNIQUE (name)
);

-- Table: privilege_relationship
CREATE TABLE privilege_relationship (
    privilege_relationship_id integer NOT NULL CONSTRAINT privilege_relationship_pk PRIMARY KEY AUTOINCREMENT,
    parent_id integer NOT NULL,
    child_id integer NOT NULL,
    CONSTRAINT privilege_relationship_parent_child UNIQUE (parent_id, child_id),
    CONSTRAINT privilege_relationship_parent_id FOREIGN KEY (parent_id)
    REFERENCES privilege_group (privilege_group_id),
    CONSTRAINT privilege_relationship_child_id FOREIGN KEY (child_id)
    REFERENCES privilege_group (privilege_group_id),
    CONSTRAINT privilege_relationship_check CHECK (parent_id != child_id)
);

每个父母可以有多个孩子,每个孩子可以有多个父母。处理关系可以在数据库之外完成,但数据库中是否有一种方法可以防止递归关系?

我的研究表明,可以使用CREATE TRIGGER并使用 RAISE 功能来防止某些内容完成,但内部深度优先或广度优先搜索的可能性 SQLite3 对我来说不了解。

0 个答案:

没有答案