node-orm2中的REFERENCE KEY

时间:2013-07-31 12:59:31

标签: node.js postgresql node-orm2

我正在研究基于node.js的REST API,我选择了postgresql数据库来存储数据。假设此数据库有两个表名UserComment。任何Comment属于一个User,当我们决定删除User时,必须删除他/她的Comment。所以,我按如下方式设计了我的表:

CREATE TABLE User(
    user_id SERIAL,
    username VARCHAR(32) NOT NULL,
    password VARCHAR(32) NOT NULL,
    CONSTRAINT pk_user PRIMARY KEY (user_id),
    CONSTRAINT uq_user UNIQUE (username)
)

CREATE TABLE Comment(
    comment_id SERIAL,
    user_id INTEGER NOT NULL,
    content TEXT NOT NULL,
    CONSTRAINT pk_cmnt PRIMARY KEY (comment_id),
    CONSTRAINT fk_cmnt FOREIGN KEY (user_id) REFERENCES User(user_id)
        ON UPDATE CASCADE ON DELETE CASCADE
)

但我不运行此代码并使用node-orm2代替。我设计了两个简单的模型来处理这个简单的代码:

var User = db.define('user', {
    username: {
        type: 'text',
        size: 32, // VARCHAR(32)
        required: true, // NOT NULL
        unique: true // UNIQUE INDEX
    },
    password: {
        type: 'text',
        size: 32, // VARCHAR(32)
        required: true // NOT NULL
    }
}, {
    id: 'user_id' //SERIAL
});

var Cmnt = db.define('comment', {
    content: {
        type: 'text',
        required: true // NOT NULL
    }
}, {
    id: 'comment_id' //SERIAL
});

Cmnt.hasOne('user', User, {required: true}); // CREATE ASSOCIATION KEY

并使用这些模型同步数据库:

db.sync();

现在,我想插入属于user_id不存在的用户的新评论。因此,Comment模型接受此并将行插入comment表。

我的问题是,如何处理REFERENCE KEYON UPDATE CASCADE ON DELETE CASCADE之类的内容?

提前致谢:)

1 个答案:

答案 0 :(得分:1)

尝试像这样使用延迟:

CREATE TABLE Comment(
    comment_id SERIAL,
    user_id INTEGER NOT NULL,
    content TEXT NOT NULL,
    CONSTRAINT pk_cmnt PRIMARY KEY (comment_id),
    CONSTRAINT fk_cmnt FOREIGN KEY (user_id) REFERENCES User(user_id)
        ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED
)