СПРАВОЧНЫЙ КЛЮЧ в node-orm2
Я работаю над REST API на основе node.js и выбрал postgresql
база данных для хранения данных. Предположим, что в этой базе данных есть две таблицы имен User
а также Comment
, любой 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 KEY
и ON UPDATE CASCADE ON DELETE CASCADE
?
Заранее спасибо:)
1 ответ
Попробуйте использовать deferrable, как это:
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
)