📖 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

+ Recent posts