gi_dor

SQL ) 테이블 생성시 Deleted 컬럼이 필요 할까? 본문

DataBase

SQL ) 테이블 생성시 Deleted 컬럼이 필요 할까?

기돌 2023. 12. 13. 17:04
728x90

 

CREATE TABLE SAMPL_CUSTOMERS
(
    NO          NUMBER(10),
    ID          VARCHAR2(255) CONSTRAINT custmerId_NN NOT NULL,
    NAME        VARCHAR2(255) CONSTRAINT cusomterNm_NN NOT NULL,
    PASSWORD    VARCHAR2(255) CONSTRAINT cusomterPw_NN NOT NULL,
    EMAIL       VARCHAR2(255),
    TEL         VARCHAR2(255) CONSTRAINT customer_Tel_NN NOT NULL,
    GENDER      CHAR(1),
    POSTAL_CODE VARCHAR2(20),
    ADDRESS1    VARCHAR2(255),
    ADDRESS2    VARCHAR2(255),
    DELETED     CHAR(1) DEFAULT 'N',
    REG_DATE    DATE    DEFAULT SYSDATE,
    UPD_DATE    DATE    DEFAULT SYSDATE,

    CONSTRAINT customer_No_Pk PRIMARY KEY (NO),
    CONSTRAINT customer_Id_Pk UNIQUE (ID),
    CONSTRAINT customer_Gender CHECK ( USER_GENDER IN ('F', 'M') ),
    CONSTRAINT customer_Email_UK UNIQUE (EMAIL),
    CONSTRAINT customer_DELETED_CK CHECK ( DELETED IN ('Y', 'N') )
)

 

SQL 수업중 제약조건에 대해서 배우게 되었다 

CREATE 를 사용해 테이블을 만드는 중에 문득 Deleted 컬럼이 거슬렸다

지난번 프로젝트 모델링 할 때 deleted 컬럼을 사용했었는데 

회원 탈퇴하면 그냥 삭제 처리하면 되는걸 

deleted 컬럼을 만들어서 N으로 표시해야할까 ?

라고 생각했다.


DELETED 컬럼  필요해 ?

 

( Customer )

Customer_No (PK) Customer_Name deleted
10 곽두팔 N
20 김분식 N
30 박탈퇴 Y

 

(Order)

Order_No (PK) Order_other Customer_No (FK)
1205 상품A 10
1206 상품B 10
1210 상품B 20



예를들어
Customer 테이블  Customer_No  
Order 테이블 Customer_No  

Order 테이블 Customer_No  가 Customer 테이블의  Customer_No 를 참조 하고 있다면
Order 테이블 Customer_No는 FK 로 설정되어있다

이 상황시  발생할수 있는 경우가 2가지가 있다.

1.ON DELETE CASCADE 

  • 테이블에서 행 하나 삭제시 해당 고객이 주문한 모든 주문행도 삭제가 된다
  • 판매량 조사 같이 주문량이 필요한 경우 문제가됨

 

2. ON DELETE RESTRICT 

  • 테이블에서 행 하나 삭제시 해당 고객이 주문한 행이 있다면 삭제가 되지 않는다
  • 고객이 회원탈퇴 시 'N' 값이 아닌 'Y' 값을 주어서 회원 탈퇴 표시를 따로 해야한다.
728x90