[230630] 테이블(생성, 삭제)/기본키, 외래키/데이터 타입/제약조건/1:M, M:N (DAY 3) - 구디아카데미후기 IT 국비지원 민경태 강사님

MJ·2023년 6월 30일

수업 TIL🐣💚

목록 보기
3/68

🔸테이블

  • 행(ROW)과 열(COLUMN)으로 구성
  • 열, 필드, 속성(Attribute)
  • 행, 레코드, 튜플

🔻테이블 이름 규칙

  1. 대소문자를 구별하지 않음
  2. 서로 다른 테이블에서 동일한 데이터를 저장하는 칼럼 이름은 가능하면 같은 이름 지정
  3. 영문자로 시작
  4. 영문자, 숫자, 특수문자('_', '$', '#') 사용 가능

🔻무결성 제약조건

  1. NOT NULL: 필수, NULL 값을 허용하지 않음
  2. UNIQUE: 중복 값을 허용하지 않음
  3. PRIMARY KEY: 기본키(NOT NULL+UNIQUE)
  4. FOREIGN KEY: 외래키
  5. CHECK: 값 유효성 검사 (들어올 수 있는 값 제한해서 잘못된 데이터 막음, 안중요)

🔻데이터 타입

1. NUMBER(P,S)

  • P: 정밀도 , S: 스케일 → 생략가능
  1. 정밀도: 전체 유효 숫자의 개수
  2. 스케일: 소수부의 유효 숫자의 개수

2. CHAR(size): 고정 문자

  • 글자 수가 고정된 타입 (예시: 폰번호, 주민번호 등)

3. VARCHAR2(size): 가변 문자

  • 글자 수가 고정되지 않은 타입 (예시: 이름, 이메일, 주소 등)

4. CLOB: 큰 텍스트 타입

5. DATE: 날짜와 시간을 동시에 표현하는 타입

  • 년, 월, 일, 시, 분, 초

6. TIMESTAMP: 날짜와 시간을 동시에 표현하는 타입

  • 년, 월, 일, 시, 분, 초, 마이크로초

🔻테이블 생성

-- 자식 먼저 지우기 (테이블 생성 전에는 이전에 만든게 있을 수도 있으니 먼저 지워줘야 함)
DROP TABLE STUDENT_T;

-- 부모 나중에 지우기
DROP TABLE SCHOOL_T;

-- 부모 먼저 만들기
CREATE TABLE SCHOOL_T (
    SCH_CODE NUMBER            NOT NULL,
    SCH_NAME VARCHAR2(10 BYTE) NOT NULL,
    CONSTRAINT PK_SCH PRIMARY KEY(SCH_CODE) -- 제약조건의 이름은 PK_SCH, SCH_CODE에 PRIMARY KEY 지정
);

-- 자식 나중에 만들기
CREATE TABLE STUDENT_T (
    STU_NO   NUMBER NOT NULL,
    SCH_CODE NUMBER, -- SCH_CODE는 SCHOOL_T 테이블의 SCH_CODE를 참조
    STU_NAME VARCHAR2(10 BYTE) NOT NULL,
    CONSTRAINT PK_STU PRIMARY KEY(STU_NO),
    CONSTRAINT FK_SCH_STU FOREIGN KEY(SCH_CODE) REFERENCES SCHOOL_T(SCH_CODE) ON DELETE CASCADE
    -- 제약조건의 이름은 FK_SCH_STU, SCH_CODE는 SCHOOL_T 테이블의 SCH_CODE를 참조
);    
  • 테이블 구성은 상단에 column, 하단에 제약조건을 적어준다.

삭제 옵션

  • ON DELETE CASCADE: 외래키가 참조하는 기본키 값이 삭제되면 외래키도 함께 삭제
  • ON DELETE SET NULL: 외래키가 참조하는 기본키 값이 삭제되면 외래키를 NULL로 처리
-- 외래키 지정할 때 적음, 현재 표 = 프로젝트 진행 명단
CONSTRAINT FK_EMP FOREIGN KEY(EMP_NO) REFERENCES EMPLOYEE_TBL(EMP_NO) ON DELETE CASCADE, 
--사원(EMPLOYEE_TBL) 삭제 시 프로젝트 진행 명단에서 함께 삭제
CONSTRAINT FK_PJT FOREIGN KEY(PJT_NO) REFERENCES PROJECT_TBL(PJT_NO) ON DELETE SET NULL 
--프로젝트(PROJECT_TBL) 삭제 시 프로젝트 진행 명단에서 참조하던 정보만 NULL 처리

🔻테이블 구조 확인

DESCRIBE BANK_TBL;
DESC CUSTOMER_TBL;
-- DESCRIBE는 최대 4글자까지 줄여서 써도 똑같이 실행 가능, DESC=DESCR=DESCRI=DESCRIB=DESCRIBE

🔸기본키(PRIMARY KEY)

  • 유일성+최소성
  • 개체 무결성
    • NOT NULL: NULL 값 가질 수 없음
    • UNIQUE: 중복된 값 가질 수 없음

🔸외래키(FOREIGN KEY)

  • 다른 테이블의 기본키 또는 유일키와 관계를 맺을 수 있음
  • 참조 무결성
    • 관계를 맺은 테이블 키의 도메인과 동일한 값을 가져야 함 (관계 맺은 키에 없는 데이터는 가질 수 없음)
  • 중복 가능, NULL 가능

🔸1:M 관계

1     :     M
PK   :     FK
부모 :   자식

  • 만들 때는 부모 테이블 먼저, 지울 때는 자식 테이블 먼저

🔸M:N 관계

  • M:N 관계를 가진 2개의 테이블은 직접 관계를 맺는 것이 불가능
  • 관계를 맺기 위해서 별도의 테이블 추가로 필요
  • 1:M 관계 2개로 구현

노래마다 해시태그 달기
노래(A,B) - 해시태그(NEW,HOT) (X)
노래 - 노래-해시태그 - 해시태그 (O)
           A NEW
           A HOT
           B NEW



🟢 구디아카데미후기 IT국비지원 민경태 강사님 수업 3일차! 🟢
전공 수업때나 정처기 공부할 때는 이론적으로만 알고 넘어가서 잘 몰랐던 부분들인데 SQL Developer를 통해 실습을 진행하며 배우니 훨씬 잘 이해된다. 확실하게 이론 정립을 할 수 있었다. 뿌듯하고 재밌었다 ㅎㅎㅎ

0개의 댓글