SQL(관계형 데이터베이스) 핵심정리
인스턴스 > 스키마 > 테이블 구조로 이루어져 있습니다.
데이터를 본격적으로 저장하는 곳이 테이블입니다.
👇테이블 예시
테이블의 데이터들은 그 종류에 따라 필드로 구분됩니다.
필드 혹은 속성 혹은 프로퍼티
👇필드 이름 영역
하나의 필드를 공유하는 곳을 column이라고 부릅니다.
👇first_name column
하나의 완전한 데이터를 행(row), 레코드, 엔티티로 부릅니다.
모든 데이터들은 테이블의 rule에 맞게 들어와야 합니다.
(ex. 데이터 종류.. 데이터 타입.. 데이터 크기 등)
데이터의 종류에 따라 한 스키마 안에서 다른 테이블에 저장됩니다.
그리고 한 테이블 안에서 각 필드의 기준에 맞게 데이터가 저장이 됩니다.
테이블의 필드는 각각 명확한 기준의 데이터 유형과 데이터 크기를 요구합니다.
따라서, 하나의 column은 동일한 데이터 타입을 공유합니다.
각각의 table은 PK(Primary Key)를 지닙니다.
데이터들에게 부여되는 고유번호입니다.
(상품번호, 학번, 주문번호와 같은 개념)
보통 INT 타입에 Auto_Increment 속성을 지니고 있으며
id라는 이름의 필드에 지정됩니다.
id 필드 생성 예시 (sequelize 사용)
//sequelize 모듈 불러오기
const Sequelize = require('sequelize');
//인스턴스(데이터베이스) 생성하기
const sequelize = new Sequelize(
'schemaName',
'userName',
'password',
{dialect: 'mysql', host: 'localhost'}
);
//product 이라는 테이블 생성
sequelize.define('product', {
// Primary Key가 될 아이디
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true
},
name: {
type: Sequelize.STRING,
allowNull: false
},
price: {
type: Sequelize.DECIMAL(13, 2),
allowNull: false
}
});
각각의 테이블들은 서로 관계를 형성합니다. (핵심!)
테이블 간의 관계는 relation, relationship, associations 등으로 불리며
관계의 종류에는 One-To-One, One-To-Many, Many-To-Many가 있습니다.
👇테이블 관계 생성 예시 (sequelize 사용)
One-To-One 관계
const User = sequelize.define('user', /* ... */);
const Cart = sequelize.define('cart', /* ... */);
User.hasOne(Cart);
Cart.belongsTo(User);
//고객은 하나의 장바구니만을 소지할 수 있으며,
//장바구니는 한 명의 고객에게만 속할 수 있습니다.
One-To-Many 관계
const User = sequelize.define('user', /* ... */);
const Order = sequelize.define('order', /* ... */);
User.hasMany(Order);
Order.belongsTo(User);
//고객은 하나 이상의 주문이 가능하지만
//하나의 주문은 한 명의 고객에게만 속합니다.
Many-To-Many 관계
자세한 내용은 여기
const Product = sequelize.define('product', /* ... */);
const Cart = sequelize.define('cart', /* ... */);
Product.belongsToMany(Order, { through: CartItem });
Cart.belongsToMany(Product, { through: CartItem });
// 장바구니에는 여러 가지의 상품을 담을 수 있습니다.
// 마찬가지로 하나의 상품 종류는 여러 장바구니에 담길 수 있습니다.
테이블이 많아질수록 관계가 많아지고 복잡해집니다!!