2

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

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

提前致谢 :)

4

1 回答 1

1

Try to use deferrable like this:

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
)
于 2013-08-19T09:34:21.383 回答