작성
·
445
1
저희 강의에서 사용하는 H2 sql schema를 그대로 복붙해왔습니다. 다음과 같습니다.
drop table member if exists cascade;
create table member (
member_id varchar(10),
money integer not null default 0,
primary key (member_id)
);
저희 강의에서는 member_id varchar(10).
즉, String 타입의 ID를 PK로 사용하고 있습니다.
하지만 다음 링크를 보시면 실무에서는 String 타입의 ID를 PK로 사용하지 않는다고 답변해주셨습니다.
https://onduway.tistory.com/80
그래서, String member_id가 아닌 auto_incremental인 Long id를 pk로 쓰면. 다음과 같을것 같습니다.
create table member (
id bigint auto_incremental,
member_id varchar(10),
money integer not null default 0,
primary key (id)
);
그렇다면 member_id를 pk로 쓸때 사용하던 메소드인
public Member findById(String memberId);
는 변화 없이 그대로 사용해야 할까요?
예를들어 member_address 테이블을 상상해보겠습니다.
member테이블의 Long Id(pk)를 외래키로 member의 주소를 갖는 테이블입니다.
create table member_address (
id bigint auto_incremental,
member_id bigint(10),
money integer not null default 0,
primary key (id)
);
member_address를 탐색할때는 String meber_id가 아닌 Long member_id(member의 pk)가 필요합니다. 그렇다면 repository의 메소드가 추가되어야하지 않을까요? 다음과 같이말이죠
public Member findByMemberId(String memberId);
public Member findById(Long Id);
그러니 맨 처음 최초 로그인할때만 findByMemberId 메소드를 사용해서 PK를 받아오고. 그 이후의 모든 작업은 PK를 사용하는 findById 메소드를 사용해야 합당한 db설계일것같습니다.
질문을 요약하면 다음과 같습니다.
"String 타입의 ID를 PK로 사용하지 않고.
auto_incremental인 Long Id를 PK로 사용할때.
Repository의 탐색메소드 설계를 어떻게 해야 좋을까?"
최대한 스스로 정리해서 질문하려고 노력해보았습니다. 두서없는 질문글 읽어주셔서 감사합니다.