2013-07-31 114 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 
)