[GO SOPT] Server 3차 세미나

devguri·2023년 5월 4일
0
post-thumbnail

✨데이터베이스 제약조건

제약조건

  • 데이터의 무결성 지키기 위해 입력받은 데이터에 대한 제한을 두는 것
  • 데이터 입력시, 조건 만족했을때 입력되도록 제약 할 수 있다.

제약조건의 종류

NOT NULL

  • 해당 필드는 NULL 값을 저장할 수 없게하는 제약조건이다.
  • 칼럼을 필수 필드화 시킬 때 사용한다.

UNIQUE

  • 중복된 값을 저장할 수 없게 하는 제약조건
  • 유일성을 보장해줌

PRIMARY KEY

  • 기본키를 설정하는 제약조건
  • NOT NULL, UNIQUE 제약조건의 특성 모두 지니고 있다.

FOREIGN KEY

  • 다른 테이블과 연결하여 외래키를 지정하는 제약조건
  • 다른 테이블에 의존

[연관된 필드 지정]

//삭제 및 수정시 연관되어 있는 필드 같이 삭제 및 수정
ON DELETE CASCADE
ON UPDATE CASCADE

// 삭제 및 수정시 연관되어 있는 필드 NULL
ON DELETE SET NULL
ON UPDATE SET NULL

// 삭제 및 수정시 연관되어 있는 필드 기본값으로 설정
ON DELETE SET DEFAULT
ON UPDATE SET DEFAULT

// 참조하는 테이블에 데이터 남아있으면 삭제 불가
ON DELETE RESTRICT
ON UPDATE RESTRICT

DEFAULT

  • 해당 필드의 디폴트 값을 설정할 수 있도록 해주는 제약조건
  • 데이터를 입력하지 않아도 지정된 값이 기본으로 입력된다.

CHECK

  • 칼럼의 값을 어떤 특정 범위로 제한한다.
ALTER TABLE sopt_32
ADD CONSTRAINT SOPT_CK_NAME CHECK NUM IN (1, 2, 3, 4);

✨관계형 데이터베이스의 정규화

데이터베이스 정규화란 ?

  • 데이터베이스 이상현상을 제거하고, 데이터 중복을 최소화하여 데이터를 구조화하는 프로세스이다.
  • 이상 현상의 발생 가능성을 줄이지만 연산시간이 증가한다.

이상 현상

  • 삽입 이상 : 불필요한 데이터 함께 삽입하지 않으면 데이터 삽입이 불가능하다.
  • 갱신 이상 : 중복된 데이터 중 일부를 갱신할 경우 데이터 불일치 발생한다, 데이터 수정시 튜플 모두에 갱신해줘야한다.
  • 삭제 이상 : 어떤 데이터 삭제시 유용한 데이터도 함께 삭제될 수 있다.

정규형

제 1정규형
모든 속성의 도메인이 더 이상 분해되지 않는 원자값으로만 구성된 것

이름이메일
졍이p@naver.com, n@naver.com, k@naver.com
현이q@naver.com
린이j@naver.com, jk@naver.com
슬이dd@naver.com

⬇️ 원자값으로 구성되도록

이름이메일
졍이p@naver.com
졍이n@naver.com
졍이k@naver.com
현이q@naver.com
린이j@naver.com
린이jk@naver.com
슬이dd@naver.com

재 2정규형
모든 속성이 기본키에 완전 함수 종속되도록 한다.
부분 함수 종속 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 분해

  • 완전 함수 종속 : 어떤 속성이 기본키에 완전히 종속일 때
  • 부분 함수 종속 : 어떤 속성이 기본키가 아닌 다른 속성에 종속 될 경우, 기본키에 종속되는게 일부일 경우
학생번호강좌이름교수명성적
1알고리즘박씨100
2알고리즘박씨80
3운영체제강씨70
4운영체제강씨90
5데이터 구조민씨100

  • 현재 데이터간의 관계는 다음과 같다 !
  • 학생번호를 기본키로 나머지 속성들이 종속하고 있고,
  • 강좌 이름 -> 교수명으로 교수명은 강좌이름에 의해 결정되므로 종속되어 있다고 할 수 있다.

⬇️ 부분적 함수 종속 제거하기

두개의 구조로 나누기 가능

[수업 릴레이션]

학생번호강좌이름성적
1알고리즘100
2알고리즘80
3운영체제70
4운영체제90
5데이터 구조100

[강좌 릴레이션]

강좌이름교수명
알고리즘박씨
알고리즘박씨
운영체제강씨
운영체제강씨
데이터 구조민씨

-> 다음과 같이 두개의 구조로 나누면 부분 함수 종속을 제거할 수 있다.

제 3정규형
모든 속성이 기본키에 이행적 함수 종속 되지 않는 경우

  • 이행적 함수 종속
    • A -> B, B-> C 인 경우, A->C 성립하는 경우
    • A를 알면 B를 알고 그를 통해 C를 알 수 있는 경우

학생번호강좌이름교수명
1알고리즘박씨
2알고리즘박씨
3운영체제이씨
4운영체제이씨
5데이터 구조강씨
  • 학생번호 -> 강좌이름
  • 강좌이름 -> 교수명

-> 이러한 구조로 학생번호는 교수명을 결정할 수 있기 때문에 이행적 함수 종속 구조를 갖고 있다.

⬇️ 이행적 함수 종속 제거하기

[수강신청 릴레이션]

학생번호강좌이름
1알고리즘
2알고리즘
3운영체제
4운영체제
5데이터 구조

[강의 릴레이션]

강좌이름교수명
알고리즘박씨
알고리즘박씨
운영체제이씨
운영체제이씨
데이터 구조강씨

-> 다음과 같이 수강신청, 강의 릴레이션 2개로 나누어 표현하면 이행적 함수 종속을 제거할 수 있다.

✨ORM의 장단점

장점

  1. 객체지향적인 코드 -> 직관적으로 이해하기 어려움
    • ORM 이용하면 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어서 개발자가 객체 모델만 보고 프로그래밍 하는 데 작업 가능함
    • 코드의 가독성 높일 수 있다.
  2. 재사용, 유지보수, 리팩토링 용이성
  3. DBMS 종속성 하락 - RDBMS의 데이터 구조, 객체지향 모델 사이의 간격 좁히기 가능

단점

  1. ORM이 모든 것을 해줄 수는 없다. (SQL문도 사용할 수 있어야함)
    • 프로젝트 복잡성 커질수록 난이도 올라가고 SQL문 속도를 위해 별도 튜닝이 필요함
  2. 복잡한 쿼리문의 경우 오히려 SQL문으로 사용하는 것이 직관적이고 효율적임!

✨@DynamicUpdate

  • 실제 값이 변경된 칼럼으로만 update 쿼리를 만드는 기능이다.
  • Entity에서 어노테이션 추가하여 변경된것만 추적하여 반영한다.
@Entity
@DynamicUpdate
public class User {
    // Existing data and methods
}
  • Entity에서 한 속성만 변경했더라도 선언된 속성값 다 변경됨
  • 변경된 칼럼만 찾아서 업데이트 진행해줌

✨정규표현식

  • 문자열 처리하는 방법 중의 하나로, 특정 조건의 문자를 검색하거나 치환하는 과정을 간편하게 처리할 수 있는 수단이다.
  • 사용자로부터 입력 받는 부분에서 유효성 체크를 위해 적용한다.

@Pattern(regexp = "^[가-힣a-zA-Z]{2,10}$", message = "닉네임 형식에 맞지 않습니다.")
-> 이런식으로 문자열 형식을 체크하기 위한 것이다.
-> 해당 값만 입력받도록 설정

profile
Always live diligently

0개의 댓글

관련 채용 정보