앞전의 테이블 잘못된 부분 수정 하기
입금테이블에서 입금이 될때 해당 은행 까지 입력해 줄려고 은행 테이블과 일 대다 관계를 맺어 줬는데
입금테이블에 값이 안들어가면 은행 테이블에 어떤 값도 넣을 수 없다.
왜냐면 은행테이블이 입금테이블을 참조하고 있기 때문이다. 나는 입금테이블에 값이 입력이 되기전에
은행테이블에 은행 이름들을 미리 입력해 두고 싶었는데 이런 식으로 설계를 하면 은행 테이블에
미리 값을 넣을 수 없다. 지출과 관계를 맺고 있는 구분 테이블도 마찬가지다.
오류문이 어떻게 나오는지 보자
USE MYDB;
SHOW TABLES;
SELECT * FROM BANK;
INSERT INTO BANK VALUES(1,1,1,'WOORI');
-- INSERT MEMBER
INSERT INTO MEMBER VALUES('KANG','1111','NAME',20);
INSERT INTO MEMBER VALUES('KIM','222','NAME1',30);
INSERT INTO HOUSE_HOLD VALUES(1 ,'KANG',10000, NOW());
-- 가계부가 자식 테이블로서 부모인 멤버 테이블을 참조 하고 있다.
-- 그래서 맴버테이블에 없는 아이디는 가계부 테이블에 입력이 불가능 하다.
INSERT INTO HOUSE_HOLD VALUES(2 ,'KANG1',10000, NOW());
-- Error Code: 1452. Cannot add or update a child row:
-- a foreign key constraint fails
-- (`mydb`.`house_hold`, CONSTRAINT `fk_HOUSE_HOLD_MEMBER1` FOREIGN KEY (`MEMBER_ID`) REFERENCES `member` (`ID`)
-- ON DELETE NO ACTION ON UPDATE NO ACTION)
그래서!
아래와 같이 바꿔주었다.
그런데 문제 점이 또 발견 되었다.
household에는 입금 칼럼과 지출 칼럼이 있다.
하지만 값을 입력할때 입금, 지출 동시에 입력은 불가능하다.
즉, 널 값이 존재하는 행들이 엄청 많아 지게 된다. 메모리의 낭비가 발생한다.
그래서 house hold 테이블을 다시 쪼개줘야 한다.
가계부는 체크카드의 입출금을 기입한다
은행어플이 알아서 해주겠지만 그래도 나름의 몇가지 기능을 더 붙여보고 싶었다.
말그대로 나만의 가계부다
앞으로 구현해 나가면서 보완할 것은 보완해 나가고 좀더 완성도를 살려보겠다.
'데이터 베이스 > DB모델링' 카테고리의 다른 글
6.나만의 가계부를 만들어 보자 - mysql 날짜 계산 (1) | 2016.12.13 |
---|---|
5.나만의 가계부를 만들어 보자 - 최종테이블&엑셀정리 (1) | 2016.12.08 |
4.나만의 가계부를 만들어 보자 - 최종테이블설계 (2) | 2016.12.08 |
3.나만의 가계부를 만들어 보자 - 잘 작동하는지 테스트 해보기&추가 (1) | 2016.12.07 |
1.나만의 가계부를 만들어 보자 - 요구사항 정의&개념&논리 설계 (3) | 2016.12.05 |
댓글