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 |