본문 바로가기
데이터 베이스/DB모델링

2.나만의 가계부를 만들어 보자 - 앞전의 테이블 잘못된 부분 수정 하기

by 인생여희 2016. 12. 6.
반응형

앞전의 테이블 잘못된 부분 수정 하기




입금테이블에서 입금이 될때 해당 은행 까지 입력해 줄려고 은행 테이블과 일 대다 관계를 맺어 줬는데

입금테이블에 값이 안들어가면 은행 테이블에 어떤 값도 넣을 수 없다. 

왜냐면 은행테이블이 입금테이블을 참조하고 있기 때문이다. 나는 입금테이블에 값이 입력이 되기전에

은행테이블에 은행 이름들을 미리 입력해 두고 싶었는데 이런 식으로  설계를 하면 은행 테이블에 

미리 값을 넣을 수 없다. 지출과 관계를 맺고 있는 구분 테이블도 마찬가지다. 


오류문이 어떻게 나오는지 보자 


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 테이블을 다시 쪼개줘야 한다. 







가계부는 체크카드의 입출금을 기입한다

은행어플이 알아서 해주겠지만 그래도 나름의 몇가지 기능을 더 붙여보고 싶었다.

말그대로 나만의 가계부다

앞으로 구현해 나가면서 보완할 것은 보완해 나가고 좀더 완성도를 살려보겠다.

반응형

댓글