【问题标题】:REFERENCE KEY in node-orm2node-orm2 中的 REFERENCE KEY
【发布时间】:2013-07-31 12:59:30
【问题描述】:

我正在研究基于 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

提前致谢:)

【问题讨论】:

    标签: node.js postgresql node-orm2


    【解决方案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
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 2014-01-31
      • 1970-01-01
      相关资源
      最近更新 更多