📖 Sequelize : https://sequelize.org/docs/v6/core-concepts/assocs/
foriegn key 는 자동으로 가 아니라 1 이나 N에 해당하는 테이블이 있는 열에
1의 primary key(P.K) 에 해당하는 값을 넣어 연결시켜주는 다리 역할
❗️1 : 1 (One-To-One relationship)
The .hasOne and .bleongTo associstions 가 함께 사용된다.
특징> 두 테이블중 아무곳이나 다른 테이블의 P.K 값을 넣어주어도 상관없다.
const Profile = require('./profile');
const User = require('./user');
User.hasOne(Profile);
Profile.belongsTo(User);
//----
const saveUSer = await User.create({
...
});
const saveProfile = await Profile.create({
gender: "male",
photo: "me.jpg",
userId: saveUser.id // User table의 primary key(P.K) 입력하여 관계를 형성
});
// or
const saveProfile = await Profile.create({
gender: "male",
photo: "me.jpg",
});
const saveUser = await User.create({
name: "name",
userId: saveProfile.id
});
❗️ 1 : N (One-To-Many relationship)
The .hasMany and .belongsTo associations 가 함께 사용된다.
특징> N 에 해당하는 테이블에 1에 있는 PK 값을 입력하여 두 테이블을 연결시킨다.
const User = require('./user');
const Post = require('./post');
User.hasMany(Post);
Post.belongTo(User);
const saveUSer = await User.create({
...
});
const savePost = await Post.create({
title: "demo",
content: "nothing",
userId: saveUser.id // User table의 primary key(P.K) 입력하여 관계를 형성
});
❗️N : M ( Many-To-Many relationship)
The .hasMany and .belongsToMany associations 가 함께 사용된다.
특징> 두 테이블을 연결시켜줄 새로운 테이블을 형성해 주고, 새로운 테이블에 두테이블의 P.K 값을 입력하여 연결시킨다.
const Post = require("./post");
const Hashtag = require("./hashtag");
const PostHashtag = sequelize.define('post_hashtag', {
post_id: {
type: DataTypes.INTEGER,
references: {
model: Post,
key: 'id'
}
},
hashtag_id: {
type: DataTypes.INTEGER,
references: {
model: Hashtag,
key: 'id'
}
}
});
// PostHashtag 이용해서 두테이블을 연결해준다.
Post.hasMany(Hashtag, { through: 'PostHashtag'});
Hashtag.belongToMany(Post, { through: 'PostHashtag'});
'DataBase > Database 지식 기록' 카테고리의 다른 글
Sequelize을 이용한 Transaction (0) | 2023.10.05 |
---|---|
트랜잭션(Transaction) (0) | 2023.10.04 |
[Feedback] DB modeling (0) | 2023.09.30 |
데이터베이스 정규화 (0) | 2023.09.13 |
데이터베이스 이상 현상 (Anomaly) (0) | 2023.09.13 |