목차
1. 정규화와 모델링
1-1 정규화 개요
1-2 정규화 과정
2. 논리 모델링 구성
2-1 개체
+ (2025-03-23 추가)
3. PHP - 오라클 DB 연동
3-1 브라우저에서 DB로 데이터 입력
3-2 DB에서 브라우저로 데이터 출력
1. 정규화와 모델링
1-1 정규화 개요
정규화는 데이터를 구성할 때 요소들이 함수적 종속 관계를 유지하도록 만드는 과정으로, 데이터 구조의 안정성을 확보하고 무결성을 유지하며 저장 공간을 최소화한다.
● 정규화 장점
- 모델의 정확성
- 데이터 일치
- 모델의 단순성
- 중복의 최소화
● 함수적 종속
레코드 내에 존재하는 항목들 중에 속성 B가 속성 A에 함수적 종속 관계에 있다는 것은 A를 이용해 B를 식별할 수 있다는 의미이다.
- A → B
- A : 결정인자(Determinant)
결정인자가 여러 속성인 경우 최대한 속성이 적게 조정이 필요하다.
결정인자는 임의로 설정된 경우가 많다. ex) 군번, 주민번호 등
ex)
제품번호 → 제품명
학번 → (이름, 학과, 주소, 전화번호)
(학번, 과목번호) → 점수
1-2 정규화 과정
※ 용어 정의
식별관계 : 외부 식별자가 주식별자에 있는 관계
비식별관계 : 외부 식별자가 일반 속성에 있는 관계
완전 기능 종속 : 하나 이상의 주식별자에 함수적 종속 관계가 확실한 것
이행 종속 : 주식별자에 함수적 종속 관계가 아닌 것
● 1차 정규화
: 반복 그룹 속성을 추출한다.
- 자식 개체가 추출되며 반드시 식별관계이다.
- 주식별자를 가지고 나간다.
- 자식 개체 주식별자에 반드시 속성이 추가된다.

● 2차 정규화
: 주식별자에 완전 기능 종속되지 않는 속성을 추출한다.
: 주식별자에 의미있는 속성이 여러 개 있어야 2차 정규화를 진행한다.
- 자식 개체 주식별자에 외부 식별자를 두고 나간다.
- 부모 개체가 추출되며 반드시 식별관계이다.

● 3차 정규화
주식별자에 이행 종속인 속성을 추출한다.
- 일반 속성에 외부 식별자를 두고 나간다.
- 부모 개체가 추출되며 반드시 비식별관계이다.

2. 논리 모델링 구성
2-1 개체
개체는 관리 대상이 되는 정보를 가지고 있거나 정보의 대상이 되는 유/무형의 사물이나 객체로 DB에서는 테이블을 나타낸다.
● 개체의 특징
- 상호 배타성
: 모든 튜플은 하나의 개체에만 속해야 한다.
→ 사원과 관련된 정보는 하나의 테이블에 속해있어야 한다.
- 식별성
: 개체 내의 모든 튜플은 식별자에 의해 식별이 가능해야 한다.
→ 행 안의 모든 데이터는 식별자에 의해 식별이 가능해야 한다.(= 함수적 종속 관계 유지)
● 개체 유형
- 기본 개체 (핵심 개체)
: 학생, 부서, 사원 등과 같이 기본 정보를 포함한 개체이다.
- 개념 개체
: 업무 처리나 흐름을 위해 무형의 과정이나 개념을 위해 만들어진 개체이다. ex) 가상의 일련번호
- 교차 개체 (관련 개체)
: 두 개체 간의 관계를 위해 만들어지는 개체이다. 개체 간 관계가 다대다 관계라면 그 중간에 뭔가 있다는 것이며 그것이 교차 개체이다.
: 다대다 관계를 해소하는 역할을 한다.
● 개체 구분
- '상위 개체 : 하위 개체' 혹은 '부모 개체 : 자식 개체' (상대적 개념)
- '독립 개체 : 종속 개체'
독립 개체는 누군가를 참조하지 않고 혼자 존재할 수 있는 개체로 최상위 개체라고도 한다.
종속 개체는 누군가를 참조하는 개체이다.
● 개체 정의
- 선입견을 버린다.
- 명확한 의미를 정의한다.
- 서류, 인터뷰 등을 기본 자료로 이용한다.
- 상부에서 사용하는 말을 사용한다. (top - down 방법)
● 개체 정의 요소
- 개체 명칭
- 개체 설명과 의미
- 약어 및 동의어
- 차후 데이터 출현량에 대한 예측
● 개체 정의 시 주의 사항
- 단일 사례를 개체로 만들지 않는다.
: 한 행으로 구성할 내용을 테이블로 만들지 않는다.
- 개체가 고립되지 않도록 한다.
- 동의어를 각각의 개체로 만들지 않는다.
: 식별자 외에 동일한 속성을 가진 개체를 생성해서는 안된다.
+ (2025-03-23 추가)
3. PHP - 오라클 DB 연동
3-1 브라우저에서 DB로 데이터 입력
다음과 같이 html로 데이터 입력 폼을 만들어 데이터를 입력받고 php파일을 통해 데이터베이스에 데이터를 저장할 수 있다.
● 오라클 연동을 위해 각 프로그램에서 호출 할 접속 프로그램 php
입력 프로그램에게 호출되어 오라클 DB에 접속할 수 있도록 한다.
// conn.php //
<?
$server = "oracle";
$user = "php";
$passwd = "php";
$charset = "AL32UTF8";
$conn=@oci_connect($user, $passwd, $server, $charset) or die('Could not connect:');
?>
6행 $conn=@oci_connect($user, ...);
: @ 표시는 함수 에러가 발생해도 에러 메시지를 보여주지 않도록 한다.
● student(학생) 테이블 데이터 입력 폼 html
POST 방식으로 php파일에 입력값을 전달한다.
// st_in.html //
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> student 입력폼 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="insert" action="st_in.php" method="POST">
<table border="0" width="250">
<tr>
<td width="50"><p align="center">학번</p></td>
<td> <input type="text" name="sno"></td>
</tr>
<tr>
<td width="50"><p align="center">이름</p></td>
<td> <input type="text" name="sname"></td>
</tr>
<tr>
<td width="50"><p align="center">성별</p></td>
<td> 남<input type="radio" name="sex" value="남">,
여<input type="radio" name="sex" value="여"></td>
</tr>
<tr>
<td width="50"><p align="center">학과</p></td>
<td> <select name="major" size="1">
<option value="화학">화학</option>
<option value="생물">생물</option>
<option value="물리">물리</option>
<option value="유공">유공</option>
<option value="식영">식영</option></td>
</tr>
<tr>
<td width="50"><p align="center">학년</p></td>
<td> 1<input type="radio" name="syear" value="1">,
2<input type="radio" name="syear" value="2">,
3<input type="radio" name="syear" value="3">,
4<input type="radio" name="syear" value="4"></td>
</tr>
<tr>
<td width="50"><p align="center">학점</p></td>
<td> <input type="text" name="avr"></td>
</tr>
<tr>
<td colspan="2">
<p align="center"><input type="submit" name="확인" value="확인"></p>
</td>
</tr>
</table>
</form>
</body></html>
● student(학생) 테이블 데이터 입력 프로그램 php
오라클 DB 접속 프로그램(conn.php)을 호출하고 html파일에서 전달받은 입력값을 DB에 입력한다.
// st_in.php //
<?
$sno = $_POST['sno'];
$sname = $_POST['sname'];
$sex = $_POST['sex'];
$major = $_POST['major'];
$syear = $_POST['syear'];
$avr = $_POST['avr'];
require('conn.php');
$sql="insert into student (sno, sname, sex, major, syear, avr)
values ('$sno', '$sname', '$sex', '$major', $syear, $avr)";
$result=oci_parse($conn,$sql);
$re=oci_execute($result);
oci_free_statement($result);
oci_close($conn);
if($re) echo("정상 입력 되었습니다.");
// echo(" <meta http-equiv='Refresh' content = '0; URL=st_vi.php'>");
?>
9행 require('conn.php');
: conn.php 파일을 호출해 실행한다.
14, 15행 oci_free_statement($result); oci_close($conn);
: sql문을 파싱하여 실행 계획을 생성하고 그 계획대로 실행시키는 문장으로 무조건 이와 같은 형태로 작성한다.
3-2 DB에서 브라우저로 데이터 출력
다음과 같이 php를 통해 오라클 DB에 저장된 데이터를 브라우저로 출력할 수 있다.
● student(학생) 테이블 데이터 출력 프로그램 php
// st_vi.php //
<?
echo("<a href=./st_in.html>자료 입력하기</a><hr>");
require('conn.php');
$sql="select sno,sname,sex,major,syear,avr
from student order by sno";
$result=oci_parse($conn,$sql);
oci_execute($result);
while ($row = oci_fetch_array($result,OCI_NUM)){
echo("$row[0]-$row[1]-$row[2]-$row[3]-$row[4]-$row[5] <br>");
}
oci_free_statement($result);
oci_close($conn);
?>
12행 while문
: 처음은 배열 $row에 테이블의 첫 행을 가져오며 이후 while문 실행마다 그 다음 행을 가져오는 것을 반복한다. 더이상 가져올 행이 없으면 while문을 빠져나온다.
13행 echo문
: $row 테이블의 각 컬럼의 데이터를 출력한다.
● student(학생) 테이블 데이터 출력 프로그램 php 개선
13행 echo 문의 경우 배열의 키값이 숫자로 표현되어 직관적으로 어떤 컬럼인지 알아보기 힘들다. 그러므로 다음과 같이 배열의 키값을 문자로 작성하여 php를 개선할 수 있다.
// st_vi.php 개선 //
<?
echo("<a href=./st_in.html>자료 입력하기</a><hr>");
require('conn.php');
$sql="select sno, sname, sex, major, syear, to_char(avr,'0.00') avr
from student order by sno";
$result=oci_parse($conn,$sql);
oci_execute($result);
echo("<table border='0'>");
while ($row = oci_fetch_array($result, OCI_ASSOC)){
echo("
<tr>
<td width='50'><p align='center'>{$row['SNO']}</p></td>
<td width='80'><p align='center'>{$row['SNAME']}</p></td>
<td width='20'><p align='center'>{$row['SEX']}</p></td>
<td width='20'><p align='center'>{$row['SYEAR']}</p></td>
<td width='50'><p align='center'>{$row['MAJOR']}</p></td>
<td width='30'><p align='center'>{$row['AVR']}</p></td>
</tr>
");
}
echo("</table>");
oci_free_statement($result);
oci_close($conn);
?>
'일일 정리' 카테고리의 다른 글
PHP - 오라클 DB 연동, 논리 모델링 구성 (0) | 2025.03.25 |
---|---|
PHP - 오라클 DB 연동, 논리 모델링 구성 (0) | 2025.03.24 |
뷰 (View), 시퀀스 (Sequence), 모델링 (0) | 2025.03.20 |
semi-project 기업 네트워크 환경 구축 (0) | 2025.03.19 |
제약 조건: (UK, NOT NULL, CHECK), 제약 조건 관리 - 추가 삭제와 비활성화, 인덱스 구조와 이해 (0) | 2025.03.19 |