๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ
1. ์๊ตฌ์ฌํญ ์์ง ๋ฐ ๋ถ์
2. ๊ฐ๋
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
3. ๋
ผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
4. ๋ฌผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
5. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ถ
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
- ์๊ตฌ ๋ถ์ ๊ธฐ๋ฐ > ์์งํ ๋ฐ์ดํฐ > ๋ถ์ > ์ ์ฅ ๊ตฌ์กฐ ์์ฑ > ๋์ํ > ERD(์ฐ์ถ๋ฌผ)
- ๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋ ์์
- DBMS ์ข
๋ฅ๋ฅผ ๊ฒฐ์ ํ์ง ์๋๋ค.
- ๊ฐ๋
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง > ๊ฐ๋จํ๊ฒ ํํํ ์ค๊ณ๋ > ํ
์ด๋ธ + ์ปฌ๋ผ + ๊ด๊ณ
- ๋
ผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง > ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ์ง ๋ฐ์ > ์์ฑ + ๋๋ฉ์ธ + ํค > ์ ๋๋ก ๋ ์ค๊ณ๋
- ๋ฌผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง > ํน์ DBMS ๊ฒฐ์ > ์ค๋ผํด ์ ์ + ๋ฐ์ > ๋ฌผ๋ฆฌ์ ์ค์ ..
1. ERD, Entity Relationship Diagram
- ์ํฐํฐ๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ ๊ทธ๋ฆผ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ ์ค ํ๋
- ์, ์คํผ์ค, ์ ๋ฌธํ(exERD, ER-Win ๋ฑ)
2. Entity, ์ํฐํฐ
- ๋ค๋ฅธ Entity์ ๋ถ๋ฅ๋ ์ ์๊ณ , ๋ค๋ฅธ Entity์ ๋ํด ์ ํด์ง ๊ด๊ณ๋ฅผ ๋งบ์ ์ ์๋ ๋ฐ์ดํฐ ๋จ์
- ๋ฆด๋ ์ด์
= ๊ฐ์ฒด = ๋ ์ฝ๋ = ์ํฐํฐ = ํ
์ด๋ธ(ํ)
a. ํ์ ์ ๋ณด ๊ด๋ฆฌ
- ์ ๋ณด ์์ง: ์์ด๋, ํ์๋ช
, ๋์ด, ์ฃผ์, ์ฐ๋ฝ์ฒ..
- ํ์(_์์ด๋_, ํ์๋ช
, ๋์ด, ์ฃผ์, ์ฐ๋ฝ์ฒ)
b. ๊ฐ์์ค ์ ๋ณด ๊ด๋ฆฌ
- ์ ๋ณด ์์ง: ๊ฐ์์ค ํธ์, ํฌ๊ธฐ, ์ธ์์, ์ฉ๋, ๋ฉด์ ..
- ๊ฐ์์ค(๊ฐ์์ค ํธ์, ํฌ๊ธฐ, ์ธ์์)
3. Attribute, ์์ฑ
- ์ํฐํฐ๋ฅผ ๊ตฌ์ฑํ๋ ์ ๋ณด
- ์ปฌ๋ผ
4. Entity Relationship, ์ํฐํฐ ๊ด๊ณ
- ํ์(์ด๋ฆ, ๋์ด..)
- ๊ต์ฌ(์ด๋ฆ,๋ด๋น๊ณผ๋ชฉ..)
- ํ๊ธ(ํ๋
,๋ฐ..)
- ํ์ <-> ํ๊ธ <-> ๊ต์ฌ
ERD ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ > Entity, Attribute, Relationship ๋ฑ์ ํํํ๋ ๋ฐฉ๋ฒ
1. Entity
- ์ฌ๊ฐํ
- ์ด๋ฆ์ ์์ฑ
- ERD๋ด์ ๋์ผํ ์ํฐํฐ๋ช
์ฌ์ฉ๊ธ์ง
2. Attribute
- ๋๊ทธ๋ผ๋ฏธ
- ์ํฐํฐ์ ์ฐ๊ฒฐ
- ์ถ๊ฐ ํ๊ธฐ์ฌํญ(์์ฑ์ ๋ํ ์ฑ์ง ๊ธฐ์ )
a. NN, Not Null
- ํด๋น ์์ฑ์ ๋ฐ๋์ ์์ฑํด์ผ ํ๋ค.
- ํ์๊ฐ
b. ND, not Duplicate
- ํด๋น ์์ฑ์ ์ค๋ณต๋ ์ ์๋ค.
- ์ ์ผ๊ฐ(Unique)
1. ์ค๋ณต๋๋ฉด ์๋๊ณ , ์๋ต๋๋ฉด ์๋๋ค.(NN,ND)
- #*์์ฑ๋ช
2. ์๋ต๋๋ฉด ์๋๋ค.(NN)
- *์์ฑ๋ช
3. ์ค๋ณต๋๋ฉด ์๋๋ค.(ND)
- #์์ฑ๋ช
4. ์ค๋ณต๋๋ ๋๊ณ , ์๋ต๋๋ ๋๋ค.
- ์์ฑ๋ช
-o์์ฑ๋ช
-optional
3. Relationship
- ๋ง๋ฆ๋ชจ
- ์ํฐํฐ์ ์ํฐํฐ์ ๊ด๊ณ
- ๊ฐ์ฅ ์ค์ํ ํํ(***)
- ๊ด๊ณ์ ํจํด
A์ํฐํฐ : B์ํฐํฐ
a. 1:1
- ์ผ๋์ผ
b. 1:N
- ์ผ๋๋ค
c. N:M
- ๋ค๋๋ค
๋น๋์ค ๋์ฌ์
1. ์ํฐํฐ ์ ์
- ์ฅ๋ฅด
- ๋น๋์ค
- ํ์
2. ์์ฑ ์ ์
3. ์๋ณ์ ์ ์ธ
- ๊ธฐ๋ณธํค
----------------------- ๊ฐ๋
์ ๋ชจ๋ธ๋ง
4. ๋
ผ๋ฆฌ ๋ชจ๋ธ๋ง > ๋
ผ๋ฆฌ ERD
- 1~3์ ๋ฐ๋ณต > ์ ๋ฌธ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ธฐ
----------------------- ๋
ผ๋ฆฌ ๋ชจ๋ธ๋ง
5. ๋ฌผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง > ์ค๋ผํด ๋ง๊ฒ ๊ตฌ์ฒด์
- ๋ฌผ๋ฆฌ๋ช
(์๋ณ์) ์์ฑ > name
- ์๋ฃํ > varchar2
- ๊ธธ์ด > 30
- ๋๋ฉ์ธ > 2๊ธ์~5๊ธ์ ์ด๋ด์ ํ๊ธ
- ์ ์ฝ์ฌํญ ์์ฑ
----------------------- ๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ง
๋ชจ๋ธ๋ง ์์
> ERD(๋
ผ๋ฆฌ,๋ฌผ๋ฆฌ) > [์ ๊ทํ] > ์์ ์ฑ ๋๊ณ , ํจ์จ์ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝ > ERD
์ ๊ทํ, Normalization
- ์๋ฃ์ ์์ค์ด๋, ๋ถํ์ํ ์ ๋ณด๋ฅผ ์์ ๊ณ , ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ฉฐ, ๋ฐ์ดํฐ ์ข
์์ฑ์ ์ต์ํํ๊ธฐ
์ํด ERD๋ฅผ ์์ ํ๋ ์์
- ์ฐ๋ฆฌ๊ฐ ๋ง๋ ํ
์ด๋ธ(ERD) > ๋น์ ํ, ๋น์ ๊ทํ ์ํ > ์ ๊ทํ > ์ ๊ทํ๋ ๊ตฌ์กฐ์ ERD
- ์ 1 ์ ๊ทํ > ์ 2 ์ ๊ทํ > ์ 3 ์ ๊ทํ ..
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์ด ์งํฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ
1. ์์๊ฐ์ ๊ฐ์ง๋ค.
2. ์ต๋ํ null์ ๊ฐ์ง์ง ์๋๋ค.
3. ์ค๋ณต๊ฐ์ ๊ฐ์ง์ง ์๋๋ค.
์ด์ ํ์
1. ์ฝ์
์ด์, Insertion Anomaly
- ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ ๋, ์ํ์ง ์๋ ๋ฐ์ดํฐ๊น์ง ๊ฐ์ด ๋ฃ์ด์ผ ํ๋ ์ํฉ
2. ๊ฐฑ์ ์ด์, Update Anomaly
- ๋์ผํ ๋ฐ์ดํฐ๊ฐ 2๊ฐ ์ด์์ ํ
์ด๋ธ์ ๋์ ์กด์ฌ > ๋ ์ค 1๊ฐ๋ง ์์ ๋ฐ์ > ๋ ์ค ์ด๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ?
3. ์ญ์ ์ด์, Deletion Anomaly
- ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋, ์ํ์ง ์๋ ๋ฐ์ดํฐ๊น์ง ๊ฐ์ด ์ง์์ผ ํ๋ ์ํฉ
ํจ์ ์ข
์, Functional Dependency
- 1๊ฐ์ ํ
์ด๋ธ ๋ด ์ปฌ๋ผ๋ผ๋ฆฌ์ ๊ด๊ณ ํํ
- *** ์ ๊ทํ๋ '๋ถ๋ถ ํจ์ ์ข
์'์ด๋ '์ดํ ํจ์ ์ข
์'์ ๋ชจ๋ ์์ ๊ณ ,
๋ชจ๋ ์ปฌ๋ผ ๊ด๊ณ๋ฅผ '์์ ํจ์ ์ข
์'์ผ๋ก ๋ง๋๋ ์์
์ด๋ค.
1. ์์ ํจ์ ์ข
์, Full Functional Dependency
2. ๋ถ๋ถ ํจ์ ์ข
์, Partial Functional Dependency
3. ์ดํ ํจ์ ์ข
์, Transitive Functional Dependency
์ ๊ทํ
- ๋น์ ๊ทํ > ์ ๊ทํ
- 1NF > 2NF > 3NF(Normal Form)
์ 1 ์ ๊ทํ, 1NF
- ๋ชจ๋ ์ปฌ๋ผ(์์ฑ)์ ์์๊ฐ์ ๊ฐ์ง๋ค.
- ๋ค์ค๊ฐ(์ฌ๋ฌ๊ฐ๋ก ๋ถ๋ฆฌ ๊ฐ๋ฅํ ๊ฐ)์ 1๊ฐ์ ์ปฌ๋ผ์์ ๋ฃ์ง ์๋๋ค.
- ๋ค์ค๊ฐ์ ๊ฐ์ง๋ ์ปฌ๋ผ ์ฐพ๊ธฐ > ์์ ๋ ์์
์ 2 ์ ๊ทํ, 2NF
- ๊ธฐ๋ณธํค(PK)๊ฐ ์๋ ๋ชจ๋ ๋๋จธ์ง ์ปฌ๋ผ์ ๊ธฐ๋ณธํค์ ์์ ํจ์ ์ข
์์ด์ด์ผ ํ๋ค.
- ๋ถ๋ถ ํจ์ ์ข
์ ๊ฒ์!! > ๋ถ๋ถ ํจ์ ์ข
์ ์ ๊ฑฐ!!
- ์ฃผ๋ก ๋ณตํฉํค๋ฅผ ๊ฐ์ง๋ ํ
์ด๋ธ์์ ๋ฐ๊ฒฌ๋๋ค.
- ์ผ๋ถ ์ปฌ๋ผ์ด ๋ณตํฉํค ์ผ๋ถ์๋ง ์ข
์๋๋ ํ์์ ์ ๊ฑฐํ๋ ์ ๊ทํ
์ 3 ์ ๊ทํ, #NF
- ๊ธฐ๋ณธํค(PK)๊ฐ ์๋ ๋ชจ๋ ๋๋จธ์ง ์ปฌ๋ผ์ ๊ธฐ๋ณธํค์ ์์ ํจ์ ์ข
์์ด์ด์ผ ํ๋ค.
- ์ดํ ํจ์ ์ข
์ ๊ฒ์!! > ์ดํ ํจ์ ์ข
์ ์ ๊ฑฐ!!
- ์ปฌ๋ผ์ด ๊ธฐ๋ณธํค๊ฐ ์๋ ๋ค๋ฅธ ํค์ ์ข
์๋๋ ํ์์ ์ ๊ฑฐํ๋ ์ ๊ทํ
์ญ์ ๊ทํ
- ์ ๊ทํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์๋๋๋ก ๋๋๋ฆฌ๋ ์์
- 2๊ฐ ์ด์์ ํ
์ด๋ธ > 1๊ฐ ํ
์ด๋ธ
- ์์
์ค ์ฌ์ฉ ๊ธ์ง!!
-- ๋ณตํฉํค ์์ฑํ๊ธฐ + ์ฌ์ฉํ๊ธฐ
-- ํ์
create table tblStudent (
seq number primary key, --๋ฒํธ(PK)
name varchar2(30) not null --ํ์๋ช
);
-- ๊ณผ๋ชฉ
create table tblSubject (
seq number primary key, --๋ฒํธ(PK)
name varchar2(30) not null --๊ณผ๋ชฉ๋ช
);
-- ์๊ฐ ์ ์ฒญ (๋ณตํฉํค ์์ฑํ๋ ๋ฐฉ๋ฒ)
-- ORA-02260: table can have only one primary key
create table tblRegister (
-- ์ปฌ๋ผ ์์ค์์๋ ๋ณตํฉํค๋ฅผ ์ง์ ํ ์ ์๋ค.
--student_seq number primary key,
--subject_seq number primary key,
--regdate date default sysdate
student_seq number references tblStudent(seq),
subject_seq number references tblSubject(seq),
regdate date default sysdate,
constraint register_pk primary key(student_seq, subject_seq) --๋ณตํฉํค ์ ์ธ
);
drop table tblRegister;
-- ์ฑ์
create table tblScore (
seq number primary key,
score number not null,
-- ๋ณตํฉํค๋ฅผ ์ฐธ์กฐํ๋ ์ธ๋ํค๋ ์ปฌ๋ผ ์์ค์ผ๋ก ์ ์ธํ ์ ์๋ค.
student_seq number,
subject_seq number,
constraint score_fk foreign key(student_seq, subject_seq)
references tblRegister(student_seq, subject_seq)
);
insert into tblStudent values (1, 'ํ๊ธธ๋');
insert into tblStudent values (2, '์๋ฌด๊ฐ');
insert into tblStudent values (3, 'ํํํ');
insert into tblSubject values (1, '์๋ฐ');
insert into tblSubject values (2, '์ค๋ผํด');
insert into tblSubject values (3, 'JDBC');
insert into tblSubject values (4, 'JSP');
insert into tblSubject values (5, 'Spring');
insert into tblRegister values (1, 1, sysdate);
insert into tblRegister values (1, 2, sysdate);
insert into tblRegister values (1, 3, sysdate);
insert into tblRegister values (2, 2, sysdate);
insert into tblRegister values (2, 4, sysdate);
insert into tblRegister values (2, 5, sysdate);
insert into tblRegister values (2, 1, sysdate);
insert into tblRegister values (3, 2, sysdate);
insert into tblRegister values (3, 5, sysdate);
insert into tblScore values (1, 100, 1, 1);
insert into tblScore values (2, 90, 1, 2);
insert into tblScore values (3, 80, 1, 3);
insert into tblScore values (4, 70, 2, 2);
insert into tblScore values (5, 60, 3, 2);
select * from tblStudent;
select * from tblSubject;
select * from tblRegister;
select * from tblScore;
-- ํ์ + ๊ณผ๋ชฉ > ์๊ฐ ์ ์ฒญ > ๋ชฉ๋ก
select
st.name as "ํ์๋ช
",
sj.name as "๊ณผ๋ชฉ๋ช
"
from tblStudent st
inner join tblRegister r
on st.seq = r.student_seq
inner join tblSubject sj
on sj.seq = r.subject_seq;
-- ํ์ + ๊ณผ๋ชฉ > ์๊ฐ ์ ์ฒญ > ๋ชฉ๋ก + ์ฑ์
select
st.name as "ํ์๋ช
",
sj.name as "๊ณผ๋ชฉ๋ช
",
sc.score as "์ฑ์ "
from tblStudent st
inner join tblRegister r
on st.seq = r.student_seq
inner join tblSubject sj
on sj.seq = r.subject_seq
left outer join tblScore sc
on r.student_seq = sc.student_seq and r.subject_seq = sc.subject_seq;
'ํ๋ก๊ทธ๋๋ฐ ๊ณต๋ถ > Oracle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ex29] PL/SQL (0) | 2023.03.30 |
---|---|
[ex27] transaction (0) | 2023.03.30 |
[ex26] Hierarchical Query (0) | 2023.03.30 |
[ex25] with (0) | 2023.03.30 |
[ex24] rank (0) | 2023.03.30 |