2013-07-31 116 views
2

我正在使用基于node.js的REST API,并且我选择了postgresql数据库来存储数据。假设这个数据库有两个表名UserComment。任何Comment属于一个User,当我们决定删除User时,他/她的Comment必须删除。所以,我设计我的表如下:node-orm2中的REFERENCE KEY

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

尝试使用可延期这样的:

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 
)