상세 컨텐츠

본문 제목

SQL(관계형 데이터베이스) 핵심정리

데이터베이스/RDBMS

by moonionn 2020. 9. 16. 02:58

본문

인스턴스 > 스키마 > 테이블 구조로 이루어져 있습니다.

데이터를 본격적으로 저장하는 곳이 테이블입니다.

👇테이블 예시

출처: https://www.sqltutorial.org/sql-select/

 

 

테이블의 데이터들은 그 종류에 따라 필드로 구분됩니다.

필드 혹은 속성 혹은 프로퍼티

👇필드 이름 영역

출처: https://www.sqltutorial.org/sql-select/

 

 

하나의 필드를 공유하는 곳을 column이라고 부릅니다.

👇first_name column

출처: https://www.sqltutorial.org/sql-select/

 

 

하나의 완전한 데이터를 행(row), 레코드, 엔티티로 부릅니다.

출처: https://www.sqltutorial.org/sql-select/

 

 

모든 데이터들은 테이블의 rule에 맞게 들어와야 합니다.

(ex. 데이터 종류.. 데이터 타입.. 데이터 크기 등)

데이터의 종류에 따라 한 스키마 안에서 다른 테이블에 저장됩니다.

그리고 한 테이블 안에서 각 필드의 기준에 맞게 데이터가 저장이 됩니다.

출처: https://docs.oracle.com/cd/E13167_01/aldsp/docs25/xquery/sql_pushdown.html

 

테이블의 필드는 각각 명확한 기준의 데이터 유형과 데이터 크기를 요구합니다.

따라서, 하나의 column은 동일한 데이터 타입을 공유합니다.

출처: https://www.sqltutorial.org/sql-select/

 

 

각각의 table은 PK(Primary Key)를 지닙니다.

데이터들에게 부여되는 고유번호입니다.

(상품번호, 학번, 주문번호와 같은 개념)

보통 INT 타입에 Auto_Increment 속성을 지니고 있으며

id라는 이름의 필드에 지정됩니다.

출처: http://a4academics.com/tutorials/24-sql-tutorial/17-primary-key-foreign-key-unique-key

 

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 });

// 장바구니에는 여러 가지의 상품을 담을 수 있습니다.
// 마찬가지로 하나의 상품 종류는 여러 장바구니에 담길 수 있습니다.

 

테이블이 많아질수록 관계가 많아지고 복잡해집니다!!

출처: https://help.qlik.com/ko-KR/sense/June2020/Subsystems/Hub/Content/Sense_Hub/Scripting/associations-between-logical-tables.htm

 

관련글 더보기

댓글 영역