- asp.net dropdownlist
- asp.net core Select
- javascript 바코드스캔
- SSD 복사
- ASP.Net Core 404
- javascript redirection
- ViewData
- php 캐쉬제거
- TempData
- XSS PHP
- 파일업로드 체크
- javascript 바코드 생성
- 바코드 스캔하기
- 파일업로드 유효성체크
- Mac Oracle
- 404에러페이지
- 하드 마이그레이션
- 강제이동
- asp.net Select
- XSS방어
- django 엑셀불러오기
- javascript 유효성체크
- 맥 오라클설치
- ViewBag
- jquery 바코드생성
- 말줄임표시
- 하드 윈도우 복사
- 바코드 생성하기
- jquery 바코드
- 타임피커
웹개발자의 기지개
[mysql] 다대다 관계에 대한 고찰 1 본문
실무상에서 DB 구성시 꼭 알아두어야 할 내용이 다대다 관계의 DB 구성내용이다.
Mysql 뿐만 아니라 다른 관계형 데이터베이스에서 공통으로 적용되는 아주 중요한 내용이다. ~
예를 들어 강사와 과목의 DB 를 구성한다고 하면, 이러한 다(多)대다(多) 관계의 좋은 예라 하겠다.
홍길동 강사가 수학, 국어를 가르칠수도 있고, 또한 국어를 가르치는 강사가 홍길동 뿐만 아니라 강감찬, 이순신도 있을 수 있다.
상하 관계가 있는 1대다 관계와 다른 상황이다.
이를 DB로 깔끔하게 구성하는 방법은 1:다:1 로 DB 를 재구성하는 것이다.
이렇게 1:다:1 관계로 DB 를 구성하게 되면, 홍길동 1명에 중간 다 테이블에 성적,시험일자 등의 칼럼을 구성할 수 있으며, 수학 1개로 만들 수 있다.
다음 아래는 나름대로 간단하게나마, Mysql 과 PHP 소스 형태로 한번 틀만 구성해 보았다.
[강사 테이블]
[과목 테이블]
[강사 와 과목의 1:다:1 테이블]
내부 조인 Inner join 형태로 lecturer (강사) 와 lecturer_cate_in (강사와 과목의 1:다:1 테이블) 결합하여,
해당 이종원 강사의 과목을 연결해 주고 있다.
그리고, mysql 과 PHP 형태로, 해당 강사 목록 페이지를 구성할때 과목 검색 기능을 연동하고자 할때,
아래와 같이 소스를 구성할 수 있겠다.
위의 그림예에서, 방과후지도사 (lcate_no 가 2번) 를 클릭하여 검색하면 해당 강사 목록을 불러오는 쿼리는 아래와 같다.
select A.lno,A.name,A.hp,A.lec_pic1 from lecturer A , (select lcate_no,lno from lecturer_cate_in B where lcate_no=2) B where A.lno=B.lno
마지막으로 PHP 형태로 간략히 종합적인 강사목록 소스를 간추려보았다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<?
$page = ($_GET[page])? $_GET[page] : $_POST[page];
$sname = ($_GET[sname])? $_GET[sname] : $_POST[sname];
$ssubject2 = ($_GET[ssubject2])? $_GET[ssubject2] : $_POST[ssubject2];
$show_page = 20;
$block_page = 10;
$keyGap = " where A.useyo='y' ";
if ($sname || $ssubject2) {
if ($sname) {
$keyGap .= " and A.name like '%".$sname."%'";
}
if ($ssubject2) {
$keyGap = " , (select lcate_no,lno from lecturer_cate_in B where lcate_no=".$ssubject2.") B " . $keyGap. " and A.lno=B.lno";
}
}
//$tQ = "select count(*) from lecturer A , (select lcate_no from lecturer_cate_in B where lcate_no=2) B ";
$tQ = "select count(*) from lecturer A $keyGap";
$tresult = mysql_query($tQ) or die("강사 카운트 정보 얻기 실패");
$trow = mysql_fetch_row($tresult);
$total = $trow[0];
if(!$page) $page = 1;
$start = ($page-1)*$show_page;
$total_page = (int)(($total-1)/$show_page)+1;
// select A.lno,A.name,A.hp,A.lec_pic1 from lecturer A , (select lcate_no from lecturer_cate_in B where lcate_no=2) B
// select A.lno,A.name,A.hp,A.lec_pic1,B.lcate_no,B.cate_name from lecturer A , (select lcate_no,cate_name from lecturer_cate_in B where lcate_no=2) B
$query = "select A.lno,A.name,A.hp,A.lec_pic1 from lecturer A $keyGap order by A.lno DESC limit $start,$show_page";
$result = mysql_query($query) or die("강사 정보 얻기 실패");
?>
|
cs |
'SQL > MySQL' 카테고리의 다른 글
[MySQL] Mac 에서 mariaDB 설치하기 (0) | 2021.06.05 |
---|---|
[mysql] 비밀번호 암호화 기법 - old한 방식으로 적용 (0) | 2020.07.15 |
[mysql] 시도-구군, 시도-구군-동 DB 정리1 (0) | 2020.05.17 |
mysql에서 사용자 계정 추가하기 (0) | 2019.10.09 |
mysql 해당DB 의 전체 테이블 삭제 (0) | 2019.06.21 |