[(none)] <= 어떤 데이터베이스를 쓸지 결정하지 않았다.
Database name = schema
foreign key
ER - Diagram 에서 ER = entity relationship 인데 여기서 entitiy 는 table 임
테이블이 여러개가 있을 떄 어느 테이블의 pk가 다른 테이블에서 참조당하는 fk가 존재한다면 참조당하는 쪽이 부모테이블이고 참조하는 쪽이 자식 테이블이다
테이블간의 관계를 sql 문으로 알아내기가 어려우니 직관적으로 알아보기 위해 만드는 것이 ER-diagram이다.
과거에는 데이터베이스에 파일을 저장했음
CPU가 달라지면 기계어가 달라지기 때문에 제어할 수가 없음 그래서 응용프로그램 개발자들이 관련 H/w제어 API(Device Driver(*.dll 의 형식))를 만들어서 제공함 보통 C를 사용해서 개발함 안에 존재하는 function name 은 같음
또한 driver 가기전 Hardware abstraction layer(HAL) 존재
OS를 경유하지 않고 바로 VGA로 가는 Direct X 존재
일반 데이터는 DBMS를 통해 저장, 변경, 삭제하지만 파일 데이터는 DBMS를 사용하지 않고 OS File API를 통해 직접 읽고 쓴다. => 이런 이유로 DB에는 첨부파일의 경로만 저장한다. 왜냐? 속도의 효율성 측면에서 그렇게 사용
DBMS는 기본적으로 OS위에 설치
filepath varchar(255) <= 파일경로는 255자를 보통 넘지 않아서 255로 해줌
파일 입출력할 때 다양한 방식이 존재함 => Base64, longtext, DBMS에 파일 경로를 지정하거나 OS에 File API 를 사용하는 방법 등이 있음
무조건 모든 테이블은 Primary Key 가 존재함 꼭 만들어줘야함
FK 제약 조건이 없을 때
insert into test2(filepath, bno) values('c:/download/x.gif', 100);
=> 100번 게시물이 존재하지 않는데 들어가버림/ 무결성 제약조건의 부재
또한 기존의 게시물을 삭제했을 때 기존 게시물의 첨부파일이 delete 되지 않음
=> 이와같은 상황을 방지하기 위해 다른 테이블이 참조하는 경우 해당 데이터의 존재 유무를 검사하도록 강제한다.
=> 즉 Foreign key 의 사용(데이터의 무결성의 유지를 도와줌)
이미 결함이 존재하게 되면 foreign 키 설정불가
alter table test2
add constraint test2_bno_fk foreign key (bno) references test1(no);
=> 이런식으로 FK 설정을 해주면 데이터베이스에서 결함이 발생하지 않도록 방지해줌
github 에서 fork 누르면 repository 복제가능
입출력 화면 만들기