#TIL_23.07.27

Leutbing·2023년 7월 27일
0

DataBase

데이터 모델링

데이터 모델링은 현실 세계를 데이터베이스로 표현하기 위해서 추상화한다.

데이터 모델링 단계

1) 개념적 모델링

  • 고객의 비즈니스 프로세를 분석하고 업무 전체에 대해서 데이터 모델링을 수행한다.
  • 복잡하게 표현하지 않고 중요한 부분을 위주로 모델링하는 단계이다.
  • 업무적 관점에서 모델링하며 기술적인 용어는 가급적 사용하지 않는다.
  • 엔티티(Entity)와 속성(Attribute)을 도출하고 개념적 ERD를 작성한다.

2) 논리적 모델링

  • 개념적 모델링을 논리적 모델링으로 변환하는 작업이다.
  • 식별자를 도출하고 필요한 모든 릴레이션을 정의한다.
  • 정규화를 수행해서 데이터 모델의 독립성을 확보한다.

3) 물리적 모델링

  • 데이터베이스를 실제 구축한다. 즉, 테이블, 인덱스, 함수 등을 생성한다.
  • 성능, 보안, 가용성을 고려해서 구축한다.

논리적 데이터베이스 설계란?

개념적 모델(ERD)로 표현하는 과정이다.

엔티티란?

업무의 관심 대상이 되는 정보를 갖고 있거나 그에 대한 정보를 관리할 필요가 있는 유형, 무형의 사물(개체)을 말한다.


홍길동, 김철수, 강만길 등을 회원 엔티티의 인스턴스라고 부른다.

속성이란?

엔티티에서 관리해야 할 최소 단위의 정보 항목을 말하며 엔티티는 하나 이상의 속성을 포함한다.

ex)
회원 엔티티는 회원의 ID, 이름, 주소, 전화번호 등을 관리하기 위한 것으로 ID, 이름, 주소, 전화번호 등을 회원 엔티티의 속성이라고 말한다. 현실세계에서 하나의 엔티티는 많은 정보를 포함할 수 있다. 그러나 모델링 과정에서 포함하고 있는 모든 정보 항목을 속성으로 표현하지는 않는다.

속성의 결정

엔티티의 속성은 테이블의 컬럼과 대응한다.

데이터 모델링에서 연습해야 할 것 중의 하나는 엔티티를 테이블과 연관지어 생각하는 것이다.

관계

두 엔티티 사이의 관련성을 나타내는 용어이다. 현실세계에서는 여러 사물들이 상호 관련성을 가지고 움직이기 때문에 이를 모델링하면 엔티티와 엔티티 사이의 관계로 표현된다.

중요❗️
두 엔티티가 관계가 있다는 의미는 상호 공유하는 속성이 있다는 의미이다.

카디낼러티(cardinality)

카디낼러티(cardinality)는 두 엔티티 간의 관계를 보다 구체적으로 표현하는 방법의 하나로 각 엔티티에 속해 있는 인스턴스들 간에 수적으로 어떤 관계에 있는지 나타내는 개념이다.

카디낼러티 종류

1대1 관계
1대1 관계는 완전 1대1 관계와 선택적 1대1 관계가 있다.

1대N 관계
1대N 관계는 엔티티에 행이 하나 있을 때 다른 엔티티의 값이 여러 개 있는 관계이다.

M대N 관계
M대N 관계는 두 개 엔티티가 서로 여러 개의 관계를 가지고 있는 것이다.

정규화

정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이다.

  • 정규화는 제 1정규화부터 제5정규화까지 있지만, 실질적으로는 제3정규화까지만 수행한다.

정규화 절차

제1정규화

  • 속성(Attribute)의 원자성을 확보한다.
  • 기본키(Primary)를 설정한다.
회원번호 회원이름 프로그램
101 강호동 스쿼시초급
102 손흥민 헬스
103 김민수 헬스, 골프초급
위 테이블의 문제점)
1. 성능이슈
2. 찾기 / 수정 / 삭제 작업 느려진다.

위 테이블 해결방법)

회원번호 회원이름 프로그램
101 강호동 스쿼시초급
102 손흥민 헬스
103 김민수 헬스
103 김민수 골프초급
  • 하나의 셀 안에서 하나의 데이터만 보관
  • 이 작업이 완료된 테이블을 제 1정규형(1st normal form) 이라고 한다.

제2정규화
기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다.

제3정규화

  • 기본키를 제외한 칼럼 간에 종속성을 제거한다.
  • 즉, 이행 함수 종속성을 제거한다.

BCNF
기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다.

제4정규화
여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다.

제5정규화
조인에 의해서 종속성이 발생되는 경우 분해한다.

ERD 표기법

JAVA

this

객체 자신의 대한 참조값을 가진다. (자기 자신을 가리킨다.)

  • 메소드 내에서만 사용된다.
  • this.멤버변수 : 매개 변수와 객체 자신이 가지고 있는 변수의 이름이 같은 경우 이를 구분하기 위해 this를 붙인다.
// BlackBox.java
public class BlackBox{
	String modelName; //모델명
}
//this.java

생성자

인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드이다.

  • 생성자의 이름은 클래스의 이름과 같아야 한다.
  • 생성자는 리턴 값이 없다. void 또한 사용하지 않는다.
  • 생성자는 몇 가지 특징을 제외하면 메소드와 다르지 않다.
  • 생성자는 메소드 처럼 클래스 내에 선언되고, 오버 로딩이 가능하므로 하나의 클래스에 여러 개의 생성자가 존재할 수 있다.

참고 블로그

형태

public class BlackBox{
	
    BlackBox(){
    
    }
}

생성자가 두개 있을 경우 예제)

//BlacBox.java

public class BlackBox{
	String modelName;
    String resolution;
    int price;
    String color;
	int serialNumber; //시리얼 번호
    
    BlackBox(){
		System.out.println("기본 생성자 호출");
		this.serialNumber = ++counter;
		//객체가 생성될 때 마다 serialNumber가 증가된다.
		System.out.println("새로운 시리얼 넘버를 발급받았습니다 : " + this.serialNumber);
    }
    BlackBox(String modelName, String resolution, int price, String color){
		this(); //기본 생성자를 바로 접근할 수 있다.
		System.out.println("사용자 정의 생성자 호출");
		this.modelName = modelName;
		this.resolution = resolution;
		this.price = price;
		this.color = color;
    }
}

// Constructor.java
public class _08_Constructor {
    public static void main(String[] args) {
        BlackBox b1 = new BlackBox();
        b1.modelName = "까망이";
        b1.resolution = "FHD";
        b1.price = 200000;
        b1.color = "블랙";

        System.out.println("-------------------");

        BlackBox b2 = new BlackBox("하양이", "UHD", 300000, "화이트");
        System.out.println(b2.modelName);
        System.out.println(b2.serialNumber);
    }
}

결과값

접근 제어자

private : 해당 클래스 내에서만 접근 가능
public : 모든 클래스에서 접근 가능
default : (아무것도 적지 않았을 때) 같은 패키지 내에서만 접근 가능
protected : 같은 패키지 내에서, 다른 패키지인 경우 자식 클래스에서 접근 가능

1개의 댓글

comment-user-thumbnail
2023년 7월 27일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기