반응형
지금까지 mySQL계정을 만들고 접속하여 DB를 사용할수 있도록 DB를 select하는것까지 알아봤습니다...
그럼 이제 직접적으로 테이블을 만들고 사용을 해야겠죠...
일단 테이블의 설계에 대해 알아볼까요?
DB에는 정규화라는게 있습니다.
사실 DB얘기를 깊게 하자면 @_@넘복잡하고...제가 아는것도 한계가 있기때문에 간단하게 요점만....어려운 용어 없이 얘기하도록 하겠습니다.
정규화의 예제를 한번 볼까요?
아래와 같은 테이블이 있습니다.....
(수강신청테이블)
이름 주소 과목
---- ----- -----
김씨 서울 과학
김씨 서울 수학
이씨 인천 과학
이씨 인천 수학
이씨 인천 국어
박씨 서울 국어
위와 같은 수강신청 테이블이 있다고 볼까요....
보아하니......누가 어디살고 어떤과목을 신청했다...라는 내용인데...
김씨는 과학,수학을 듣고....이씨는 과학,수학,국어...를 듣습니다.
그리고 박씨는 국어만 듣죠....
그런데...문제가 있죠....
김씨가 두번 나옵니다.....왜냐면 과학과 수학...두가지 이기 때문이죠...
그리고 이씨는 세번나옵니다......과학,수학,국어 이기 때문이죠....
그러면서 쓸데없는 서울이 두번나오고......인천은 세번 나왔죠......
이 얼마나 낭비입니까........
DB도 용량의 한계가 있는거죠..(-_-물론 이정도의 간단한 테이블로는 기별도 안가죠...)
어쨌든.....이런게 좀더 방대한 데이터를 다루는것이었다면....
좀 문제가 생길겁니다....억지라고요?;;;-_-
그럼 어떤 메일사이트를 예로 들어볼까요?
D라는 메일 사이트에는 회원마다 주소록이란 기능을 지원해 준답니다.
자신이 자주 보내는 사람주소를 주소록에 등록하는거죠....
위예제처럼 테이블을 짠다면 이렇게 될겁니다....
회원ID//비밀번호//이름//.....그외 회원정보....//주소록이름//주소록주소
이런식으로 엄청난 데이터가 주소록에 사람이 추가될때마다 계속 들어가는거죠.........-_-이런형식은 그대로.....아웃! 입니다.....
자 암튼 이런 이유로 정규화라는걸 합니다;;;
정규화된모습을 한번 볼까요?
(학생테이블)
이름 주소
---- -----
김씨 서울
이씨 인천
박씨 서울
(수강신청테이블)
이름 과목
---- -----
김씨 과학
김씨 수학
이씨 과학
이씨 수학
이씨 국어
박씨 국어
자 위처럼...테이블이 두개가 생겼습니다.
먼저 학생테이블에는 그 학생에 대한 모든 정보가 들어가 있는거죠...
주소 이외에도 성별이나 학번 또는 주민등록번호....뭐 그런거죠...
(-_-저기 써있는 그대로만을 보시면 안됩니다)
그리고 밑에 수강신청 테이블에서는 그 학생 이름과 과목만이 들어갑니다. 그렇기 때문에 과목이 아무리 많이 들어갔다 하더라도....
그 학생의 전체 정보가 반복되는 경우는 없습니다.
이대로라면 이전의 모델보다는 훨씬 경제적이고 합리적입니다. 그렇죠?
이렇게 테이블을 쓰기좋게 설계하는것을 정규화 라고 한다더군요;;;
엇 그런데....이렇게 테이블을 두개로 갈라놓으면 어떡하죠?....
자 볼까요?....
이씨가 수강하는 과목과 주소를 알고 싶습니다.....
그럼 이렇게 합니다.....학생테이블에서 이름이 이씨인 사람의 정보를 가져오고 또,수강신청 테이블에서도 이름이 이씨인 사람의 정보를 가져오면 되겠쬬.....-0-오오오;;;
자 여기서 나오는 말이 primary key라는것 입니다.
그 행의 주키 라는 얘기인데....(기본키라고 부른다죠~)
이는 각각의 행을 구분해줄수 있는 항목을 말하는 것입니다....
예를 들면 우리가 구입하는 제품에는 모두 제품번호라는게 있죠?
그리고 제품번호는 절대 중복되지 않습니다....
왜냐면 중복되면 각각의 제품을 구분할수 없으니까 말이죠...
primary key도 마찬가지 입니다....
독립적이면서 유일한 값을 갖고 있는것을 primary key로 정해줘야 합니다. 그리고 값이 비어있으면 안돼겠죠....비어있는 값은 null이라고 하는데 여기서 나오는 말이 not null입니다.....
즉, primary key의 조건은....unique하고 not null입니다......@_@
^^...유일하면서 비어있지 않으면 된다는거죠....
자 그럼 학생테이블에서는......어떤가요?
김씨....이씨.....박씨.........
유일한것 같지만.....어딘가 좀 -_-a;;;;
김씨,이씨,박씨....면 우리나라에서 젤 많은 성씨죠;;;
이름이란건 중복될수 있습니다.....그래서 primary key로는 쓸수 없습니다.
그다음은 주소를 볼까요?....
주소역시 무리죠......@_@ 보나마나 입니다...
생각해보세요....어떻게 사람을 주소로 구분한답니까;;;;
학교에서 선생님이 학생을 부를때...........야! 너 거기 서울시 xx구 ㅁㅁ동에 사는 놈.... 이라고 부르진 않죠........
이런경우 많을겁니다.....오늘은 28일......이니까......28번...이거 풀어봐...
그렇슴다.....바로 번호 였던것임다......-0-
학생에겐 학번이란게 있죠......primary key의 조건에 맞춰볼까요?
학번은 학생에게 하나씩 부여되는 것으로 유일한 번호이고....
학번이 없는 학생은 없습니다......+_+ 그래서 우린....primary key로 학번을 쓰기로 합니다.......짝짝짝...-0-;;
(학생테이블)
학번 이름 주소
---- ---- -----
0001 김씨 서울
0002 이씨 인천
0003 박씨 서울
(수강신청테이블)
학번 과목
---- -----
0001 과학
0001 수학
0002 과학
0002 수학
0002 국어
0003 국어
자 위와 같이....학번이라는 primary key를 써서 테이블을 바꿔봤습니다.
자 그럼 이제 다시 이씨가 수강하는 과목을 찾아볼까요?
먼저 학생테이블에서 이씨를 찾아서 학번(primary key)이 뭔가 봅시다...
앗....0002로군요...?
그럼 이제 수강신청테이블로 가서 학번이 00002인 과목을 모두 가져옵니다....그럼 결국 과학,수학,국어.....가 나오겠죠.......
엇....그런데...학생테이블에서 학번이 primary key였는데....
수강신청테이블에서도 primary key일까요?-_-
primary key의 조건을 살펴보세요......중복되는 값이 나오기 때문에 수강신청테이블에서는 primary key가 될수가 없죠......
학생테이블에서는 primary key이지만 수강신청테이블에서는 primary key가 아닙니다.....이럴경우...즉, 다른 테이블에서 primary key인 경우에 이를 foreign key라고 부릅니다........~
자.....여기까지 입니다....
제 생각엔 솔직히.......여기까지만 이해하면 어떤 형태의 테이블이라도 만들 수가 있습니다.....-_-a;;;;머리를 잘 굴려야죠...
끝내기 전에 한가지만 더 예를 들까요?
게시판에 보면 댓글이란게 있습니다..커맨트 라는 것인데....
각 글마다 따로 쓸수가 있죠.........말하자면......1번글에 커맨트를 5개 쓸수가 있고......2번글에는 2개를 쓸수가 있고......그렇죠?...
원리는 위 의 수강신청 테이블과 같습니다...
게시물 테이블이 있고......커맨트 테이블이 따로 있는거죠.....
그래서 만약 2번글이라면.......커맨트 테이블에서 2번글로 되어진 커맨트를 모두 가져오는 겁니다......
(게시물테이블)
번호 글내용 글제목
---- ------ --------
0001 .....
0002 ..
0003
(커맨트테이블)
번호 커맨트
---- -------
0001 ......
0001 ....
0002 ..
0002
0002
이해가시죠?;;;
그럼 이제 직접적으로 테이블을 만들고 사용을 해야겠죠...
일단 테이블의 설계에 대해 알아볼까요?
DB에는 정규화라는게 있습니다.
사실 DB얘기를 깊게 하자면 @_@넘복잡하고...제가 아는것도 한계가 있기때문에 간단하게 요점만....어려운 용어 없이 얘기하도록 하겠습니다.
정규화의 예제를 한번 볼까요?
아래와 같은 테이블이 있습니다.....
(수강신청테이블)
이름 주소 과목
---- ----- -----
김씨 서울 과학
김씨 서울 수학
이씨 인천 과학
이씨 인천 수학
이씨 인천 국어
박씨 서울 국어
위와 같은 수강신청 테이블이 있다고 볼까요....
보아하니......누가 어디살고 어떤과목을 신청했다...라는 내용인데...
김씨는 과학,수학을 듣고....이씨는 과학,수학,국어...를 듣습니다.
그리고 박씨는 국어만 듣죠....
그런데...문제가 있죠....
김씨가 두번 나옵니다.....왜냐면 과학과 수학...두가지 이기 때문이죠...
그리고 이씨는 세번나옵니다......과학,수학,국어 이기 때문이죠....
그러면서 쓸데없는 서울이 두번나오고......인천은 세번 나왔죠......
이 얼마나 낭비입니까........
DB도 용량의 한계가 있는거죠..(-_-물론 이정도의 간단한 테이블로는 기별도 안가죠...)
어쨌든.....이런게 좀더 방대한 데이터를 다루는것이었다면....
좀 문제가 생길겁니다....억지라고요?;;;-_-
그럼 어떤 메일사이트를 예로 들어볼까요?
D라는 메일 사이트에는 회원마다 주소록이란 기능을 지원해 준답니다.
자신이 자주 보내는 사람주소를 주소록에 등록하는거죠....
위예제처럼 테이블을 짠다면 이렇게 될겁니다....
회원ID//비밀번호//이름//.....그외 회원정보....//주소록이름//주소록주소
이런식으로 엄청난 데이터가 주소록에 사람이 추가될때마다 계속 들어가는거죠.........-_-이런형식은 그대로.....아웃! 입니다.....
자 암튼 이런 이유로 정규화라는걸 합니다;;;
정규화된모습을 한번 볼까요?
(학생테이블)
이름 주소
---- -----
김씨 서울
이씨 인천
박씨 서울
(수강신청테이블)
이름 과목
---- -----
김씨 과학
김씨 수학
이씨 과학
이씨 수학
이씨 국어
박씨 국어
자 위처럼...테이블이 두개가 생겼습니다.
먼저 학생테이블에는 그 학생에 대한 모든 정보가 들어가 있는거죠...
주소 이외에도 성별이나 학번 또는 주민등록번호....뭐 그런거죠...
(-_-저기 써있는 그대로만을 보시면 안됩니다)
그리고 밑에 수강신청 테이블에서는 그 학생 이름과 과목만이 들어갑니다. 그렇기 때문에 과목이 아무리 많이 들어갔다 하더라도....
그 학생의 전체 정보가 반복되는 경우는 없습니다.
이대로라면 이전의 모델보다는 훨씬 경제적이고 합리적입니다. 그렇죠?
이렇게 테이블을 쓰기좋게 설계하는것을 정규화 라고 한다더군요;;;
엇 그런데....이렇게 테이블을 두개로 갈라놓으면 어떡하죠?....
자 볼까요?....
이씨가 수강하는 과목과 주소를 알고 싶습니다.....
그럼 이렇게 합니다.....학생테이블에서 이름이 이씨인 사람의 정보를 가져오고 또,수강신청 테이블에서도 이름이 이씨인 사람의 정보를 가져오면 되겠쬬.....-0-오오오;;;
자 여기서 나오는 말이 primary key라는것 입니다.
그 행의 주키 라는 얘기인데....(기본키라고 부른다죠~)
이는 각각의 행을 구분해줄수 있는 항목을 말하는 것입니다....
예를 들면 우리가 구입하는 제품에는 모두 제품번호라는게 있죠?
그리고 제품번호는 절대 중복되지 않습니다....
왜냐면 중복되면 각각의 제품을 구분할수 없으니까 말이죠...
primary key도 마찬가지 입니다....
독립적이면서 유일한 값을 갖고 있는것을 primary key로 정해줘야 합니다. 그리고 값이 비어있으면 안돼겠죠....비어있는 값은 null이라고 하는데 여기서 나오는 말이 not null입니다.....
즉, primary key의 조건은....unique하고 not null입니다......@_@
^^...유일하면서 비어있지 않으면 된다는거죠....
자 그럼 학생테이블에서는......어떤가요?
김씨....이씨.....박씨.........
유일한것 같지만.....어딘가 좀 -_-a;;;;
김씨,이씨,박씨....면 우리나라에서 젤 많은 성씨죠;;;
이름이란건 중복될수 있습니다.....그래서 primary key로는 쓸수 없습니다.
그다음은 주소를 볼까요?....
주소역시 무리죠......@_@ 보나마나 입니다...
생각해보세요....어떻게 사람을 주소로 구분한답니까;;;;
학교에서 선생님이 학생을 부를때...........야! 너 거기 서울시 xx구 ㅁㅁ동에 사는 놈.... 이라고 부르진 않죠........
이런경우 많을겁니다.....오늘은 28일......이니까......28번...이거 풀어봐...
그렇슴다.....바로 번호 였던것임다......-0-
학생에겐 학번이란게 있죠......primary key의 조건에 맞춰볼까요?
학번은 학생에게 하나씩 부여되는 것으로 유일한 번호이고....
학번이 없는 학생은 없습니다......+_+ 그래서 우린....primary key로 학번을 쓰기로 합니다.......짝짝짝...-0-;;
(학생테이블)
학번 이름 주소
---- ---- -----
0001 김씨 서울
0002 이씨 인천
0003 박씨 서울
(수강신청테이블)
학번 과목
---- -----
0001 과학
0001 수학
0002 과학
0002 수학
0002 국어
0003 국어
자 위와 같이....학번이라는 primary key를 써서 테이블을 바꿔봤습니다.
자 그럼 이제 다시 이씨가 수강하는 과목을 찾아볼까요?
먼저 학생테이블에서 이씨를 찾아서 학번(primary key)이 뭔가 봅시다...
앗....0002로군요...?
그럼 이제 수강신청테이블로 가서 학번이 00002인 과목을 모두 가져옵니다....그럼 결국 과학,수학,국어.....가 나오겠죠.......
엇....그런데...학생테이블에서 학번이 primary key였는데....
수강신청테이블에서도 primary key일까요?-_-
primary key의 조건을 살펴보세요......중복되는 값이 나오기 때문에 수강신청테이블에서는 primary key가 될수가 없죠......
학생테이블에서는 primary key이지만 수강신청테이블에서는 primary key가 아닙니다.....이럴경우...즉, 다른 테이블에서 primary key인 경우에 이를 foreign key라고 부릅니다........~
자.....여기까지 입니다....
제 생각엔 솔직히.......여기까지만 이해하면 어떤 형태의 테이블이라도 만들 수가 있습니다.....-_-a;;;;머리를 잘 굴려야죠...
끝내기 전에 한가지만 더 예를 들까요?
게시판에 보면 댓글이란게 있습니다..커맨트 라는 것인데....
각 글마다 따로 쓸수가 있죠.........말하자면......1번글에 커맨트를 5개 쓸수가 있고......2번글에는 2개를 쓸수가 있고......그렇죠?...
원리는 위 의 수강신청 테이블과 같습니다...
게시물 테이블이 있고......커맨트 테이블이 따로 있는거죠.....
그래서 만약 2번글이라면.......커맨트 테이블에서 2번글로 되어진 커맨트를 모두 가져오는 겁니다......
(게시물테이블)
번호 글내용 글제목
---- ------ --------
0001 .....
0002 ..
0003
(커맨트테이블)
번호 커맨트
---- -------
0001 ......
0001 ....
0002 ..
0002
0002
이해가시죠?;;;
반응형
'PHP∵SCRIPT' 카테고리의 다른 글
잘못된 PHP 코딩 스타일 (0) | 2014.04.08 |
---|---|
PHP의 소켓 함수 (0) | 2014.04.08 |
PHP에서 암호화 encrypt 복호화 decrypt 해서 값을 넘기기 (0) | 2014.04.07 |
php 환경변수정리 (0) | 2014.04.07 |
mySQL접속하기 (0) | 2014.04.06 |
mySQL사용하기 (0) | 2014.04.06 |
mySQL이란... (0) | 2014.04.06 |
파일의 입출력 [출력하기] (0) | 2014.04.05 |
댓글