스프링/6. 스프링 DB-2

5. DB생성

sdafdq 2023. 10. 8. 03:41

create table item
(
id bigint generated by default as identity,
item_name varchar(10),
price integer,
quantity integer,
primary key (id)
)

 

item이라는 테이블인데

id는 bigint 큰 int에

gerated by default as identity : id를 제공하지 않을 시 값을 자동 생성하며 값을 제공하면 해당 값을 id 칼럼에 입력. 

identity는 identity 전략이라고 하는 데, 기본 키 생성을 DB에 위임하는 방법. auto increment 같은 방법임.

자동 값 생성은 기본값은 1부터 1씩 올라가는 듯?

물론 id값을 직접 줄 수도 있는데, 주지 않는 게 좋음.

왜냐하면 내부에 뭐랄까 sequance 같은 게 있는 모양임.

내가 1,2 까지 저장된 상태에서 4를 임의로 넣어서 저장하고,

그 다음부터 id 빼고 여러번 insert 해 봤더니,

3은 제대로 들어갔는데

4번째에 오류 뜸.

근데 또 insert 해 보니 그 때는 5번부터 잘 들어감.

아마 sequance++ 이런 식으로 하는 듯. 내부에 어떤 sequance가 있나 봄.

 

item_name 은 char로 최대 10자

price와 quantity는 int

primary는 오직 고유하게 존재해야 함. id는 오직 DB내에 자기가 가진 값이 고유해야 함.

 

 

 

DB의 기본 키(식별자)는 다음 3가지 조건을 모두 만족해야 한다.

null값 허용 X

유일해야 함.

변해선 안됨.

 

기본키를 선택하는 전략

자연키 : 주민번호, 전화번호, 이메일 등 이런 내츄럴 하면서 고유한? 비즈니스 키들..

대리키 : auto_increment 등 비즈니스와 관련없는 임의로 만들어진 키

 

사실 전화번호, 이메일 등 이런 고유하다지만 비즈니스 의미가 있는 키 들 보다는, 의미없는 대리키가 낫다.

고유하다지만 변경될 수 있다.

 

뭔가 좀 그래도 다른 저런 전화번호 같은 거 고유하게 하고 싶으면

그거 유니크 인덱스로 만들면 된다.

유니크 인덱스는 PK에서 Nullable인 것이다.

 

 

'스프링 > 6. 스프링 DB-2' 카테고리의 다른 글

7. Jdbc 템플릿 + h2를 리포지토리 구현체로  (0) 2023.10.08
6. Jdbc 템플릿  (0) 2023.10.08
4. 테스트 환경  (0) 2023.10.08
3. 간이 프로젝트의 설정부  (0) 2023.10.07
2. 학습을 위한 간이 프로젝트  (0) 2023.10.07