1. 요구사항
- 계좌 생성을 하기 위해서는 고객은 신분증을 은행원에게 제출한 뒤, 본인 확인이 되면 회원정보(User)가 등록되어야 합니다. 회원정보를 등록할 수 있는 테이블이 필요합니다.
- 은행원은 회원정보를 입력한 뒤, 계좌를 생성합니다. 계좌 생성시에 은행원은 고객에게 1000원을 받고, 1000원이 입금된 상태로 계좌가 등록됩니다.
- 은행원은 회원 정보를 조회할 수 있어야 합니다. 은행원이 회원 정보를 조회하게 되면, 관련된 계좌 목록을 함께 확인할 수 있습니다. 고객은 여러 개의 계좌를 가질 수 있습니다.
회원에는 어떤 정보가 필요할까요?
id
: (PK) 각 회원 정보의 고유한 값username
: 계정의 이름 - 검색을 위한 값password
: 계정의 비밀번호name
: 회원의 이름created_at
: 생성일자
계좌에는 어떤 정보가 필요할까요?
id
: (PK) 각 계좌 정보의 고유한 값number
: 계좌번호 - 검색을 위한 값password
: 계좌 비밀번호balance
: 계좌 잔액created_at
: 생성일자user_id
: (FK), 계좌 주인의 회원 번호
회원과 계좌는 어떤 연관 관계가 있을까요?
- 회원(1) : 계좌(N) 관계
회원과 계좌 중에 어떤 테이블이 FK를 가져야 할까요?
- 계좌에서 FK를 가져야 함
고민한 뒤 테이블을 설계해보세요
-- 회원 테이블
create table user_tb (
id bigint primary key auto_increment,
username varchar(20) unique not null,
name varchar(20) not null,
password varchar(50) not null,
created_at timestamp not null
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
-- 계좌 테이블
create table account_tb (
id bigint primary key auto_increment,
number varchar(20) unique not null,
password varchar(20) not null,
balance bigint not DEFAULT '1000',
created_at timestamp not null,
user_id bigint,
foreign key (user_id) references user_tb(id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
-- 이체 내역 테이블
create table history_tb (
id bigint primary key auto_increment,
amount bigint not null,
w_balance bigint,
d_balance bigint,
w_number_id bigint,
d_number_id bigint,
created_at timestamp not null,
foreign key(w_number_id) references account_tb(id),
foreign key(d_number_id) references account_tb(id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
2. 쿼리 작성하기
- 1111계좌에서 2222계좌로 1000원 계좌 이체
start transaction;
set @w_account = "1111";
set @d_account = "2222";
set @request_money = 1000;
set @w_balance = (select account_balance from account where account_number = w_account) - request_money;
set @d_balance = (select account_balance from account where account_number = d_account) + request_money;
update account set account_balance = w_balance where account_number = w_account;
update account set account_balance = d_balance where account_number = d_account;
insert into history(amount, w_balance, d_balance, w_account, d_account, create_at)
values(request_money, w_balance, d_balance, w_account, d_account, now());
commit;
rollback;
- 1111계좌의 입출금 내역 확인
set @account_id = "1111";
select * from history
where w_id = account_id and d_id = account_id;
3. ER-Diagram
'패캠 BootCamp' 카테고리의 다른 글
[패스트 캠퍼스 : 백엔드 개발 5기 부트캠프 기자단] 중간 회고 (0) | 2023.07.12 |
---|---|
[패스트 캠퍼스 : 백엔드 개발 5기 부트캠프 기자단] 강사진, 멘토진 (0) | 2023.06.28 |
[패스트 캠퍼스 : 백엔드 개발 5기 부트캠프] 멘토링을 진행하며 (0) | 2023.05.30 |
[패스트 캠퍼스 : 백엔드 개발 5기 부트캠프] 과정을 진행하며,, 그룹스터디_멘토링_피어리뷰 (0) | 2023.05.16 |
[패스트 캠퍼스 : 백엔드 개발 5기 부트캠프] 개인공부 5개월 드디어 부트캠프 입성_OT 후기 (0) | 2023.03.21 |