홈으로 홈으로 | 무료회원가입 | 아이디/비번찾기 | 즐겨찾기
추천음악방송메인홈1대1상담음악방송청취
okTrot(구독해주세요)
전통가요(구독해주세요)
뽕짝아가씨(구독해주세요)
아리랑가요(구독해주세요)
음악가사 검색
온라이브스토어(앱다운로드)
온라이브(방송등록및청취)
비디오 베스트 50
금영노래방
TJ노래방
유튜브 동영상 다운로드
POP Player
신나는 고스톱
컴퓨터 오목
작은 음악다방
운.영.자.1대1.상담
FAQ\지원.프로그램
Q&A\고.객.지.원

자동러시 웹플레이어신청

보안∵서버∵쿠키
윈도우∵프레임
이미지∵배경
시간∵달력∵계산
상태바∵타이틀바
음악∵영상
폼∵전송∵테이블
키보드∵마우스
효과∵링크∵메뉴
Script∵php
기타
PHP 강좌
윈도우관련팁
웹관련팁
홈페이지제작팁
기본강좌
레지스트리
윈도우서버
리눅스서버
Android
mySQL테이블의 설계
7년 전
지금까지 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

이해가시죠?;;;
추천추천 : 274 추천 목록
번호 제목
3,014
 curl 함수를 이용한 HTTP REFERER 변경
3,013
 윈도우10 시스템 파일 및 Dism 검사
3,012
 텍스트 줄바꿈, 글자자르기 CSS
3,011
 jQuery Mobile에서 유용한 코드 10가지.
3,010
 [PHP] dirname()함수와 $_SERVER 관련 상수들
3,009
 [PHP] 파일 크기, 사이즈 불러오는 함수, filesize()
3,008
 [jQuery] jQuery Quick API
3,007
 [ transition ] 링크 hover 색상 변화 속도 조절
3,006
 PHP 5.3.0 에서 사라진 함수들 대체
3,005
 어떤 파일들이 include 나 require 되었는지 확인하는 함수(get_included_files)
3,004
 PHP 날짜 형식 및 계산하기(날짜 더하고 빼기)
3,003
 jQuery Mobile에서 유용한 코드 10가지.
3,002
 값이 배열 안에 존재하는지 확인하는 in_array함수
3,001
 사용자가 웹브라우저에서 뒤로가기를 했을때 감지하는 방법
3,000
 [jQuery]버튼 활성화, 비활성화
2,999
 jQuery show() / hide() / toggle() 사용법
2,998
 jquery 여러가지 이벤트
2,997
 border-radius 속성
2,996
 네이버 오픈API 음성합성 API 사용하는 PHP 샘플코드
2,995
 UTF8 한글 자르기..
2,994
 iconv 에러 발생시 계속 처리하기 옵션
2,993
 [PHP] 현재 페이지의 도메인 , URL 정보 알아내기.
2,992
 [PHP] 막강 기능 배열..
2,991
 [CSS] - Input clear `X ` 버튼 제거 ( IE, Chrome, Firefox )
2,990
 [Mobile] - 모바일웹 Href 태그속성들
2,989
 [JqueryMobile] - 현재화면의 가로세로 사이즈 구하기
2,988
 [JqueryMobile] - 화면의 가로, 세로 사이즈 구하는 방법
2,987
 jquery로 가로 넓이(width), 세로 높이(height) 자동 조절
2,986
 iframe 높이 jquery로 자동조절하기
2,985
 jQuery 오른쪽 영역의 높이를 왼쪽 영역의 높이와 동일하게 하기
2,984
 jquery에서 테이블 짝수, 홀수 번째 TR 배경색 변경하기
2,983
 jquery에서 테이블에 마우스 오버시 해당 행의 배경색상 변경하기
2,982
 jquery 스크립트내 특정값 확인하기 (디버깅)
2,981
 jquery cookie (jquery.cookie.js)
2,980
 jquery div 기본 넓이, 높이 계산 및 padding, border 포함 하기
목록
추천음악방송
인기절정뽕짝파티
인기트로트모음
지루박디스코메들리
밤무대애창곡
전자올겐경음악
앵콜트로트
뽕짝아가씨
TROT TV
아리랑가요
작은 음악다방
종합성인가요방
카바레 음악
트롯디스코팡팡
관광 메들리
트롯카페
가요감상실
추억의옛노래
스페셜가요광장
BillBoard Free
Dance&Remix
추천가요모음
경음악.전자올겐
스페셜음악여행
WOLRD POPs
K-POP\BillBoard
JP\CN
POP TOP BEST
K.R.노래방

추천가요\인기
F뮤직 인기\발라드
F뮤직 애창\트로트
트로트성인가요
인기가요
프리미엄 POP
경음악\기타
프리미엄 최신가요
프리미엄 성인가요
가요1번지(종합)
뮤직하우스
동요\연변\반주\기타
가요축제\트롯1번지
댄스\메들리\리믹스
카페\명상\경음악\기타
추천가요\POP\기타
최신가요\인기가요
뮤직트로트 부산광역시부산진구 가야동 ㅣ 개인정보취급방침
Copyright (C) musictrot All rights reserved.