Join Expressions
- ๋ ๊ฐ์ relation์ join ํด์ ์๋ก์ด relation์ ๋ฐํํ๋ ๊ฒ
- Cartesian product!!
- ๋ณดํต from clause์์ ์ฌ์ฉ๋จ
Join conditions
Using Clause
-> attribution์ ์๋ชป ํฉ์น๋ ๊ฒฝ์ฐ๋ฅผ ๋ง๊ธฐ ์ํด ์!
select name, title
from (student natural join takes) join course using (course_id)
์ด๋ ๊ฒ join ์ด์ฉ๊ตฌ using (์ ์ฉ๊ตฌ) ๋ผ๊ณ ๋ช
์ํด์ ๊ทธ๋ฅ ๊ฒน์น๋ ๊ฑธ ๋ค ํฉ์น๋ ๊ฒ์ด ์๋๋ผ, ํน์ attribute๋ฅผ ๊ธฐ์ค์ผ๋ก join ํ๊ฒ ๋ค๊ณ ํด์ฃผ๋ ๊ฒ!
์ด ๊ฒฝ์ฐ Duplication columns์ ์ ๊ฑฐ๋๋ค.
Join Condition (on)
์ด predicate๋ where์ ์ฒ๋ผ ์ด๋ค.
์ ์์ด๋ attribute ์ด๋ฆ์ด ๊ฐ์ ํ์ ์์ด ๊ฐ๊ฐ ์ฌ์ฉ์ ์ง์ ํด์ ๊ฐ์ด ๊ฐ์ ๊ฒ๋ผ๋ฆฌ join ํ๋ ๊ฒ.
select *
from student join takes on student_ID = takes_ID
์ด ๊ฒฝ์ฐ student_ID ์ takes_ID๋ฅผ ๋น๊ตํด์ ๊ฐ์ ๊ฐ๋ผ๋ฆฌ ํฉ์น๋ค.
์๋ก ๊ฐ์ attribute๋ฅผ ํฉ์น๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ํฉ์น ๋ ํ์ชฝ columns์ ์ญ์ ํ์ง ์๊ณ ๋ ๊ฐ ๋ค ๋ณด์กดํ๋ค.
(Duplicate columns are NOT removed)
์ ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ์ด๋ค.
select *
from student, takes
where student_ID = takes_ID
Natural join
- ๋ชจ๋ ๊ณตํต๋ attribute๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ์น๊ณ ์ค๋ณต๋๋ ํํ ๋ ์ค ํ๋๋ง ์ ์งํจ
select name, course_id
from students, takes,
where student.ID = takes.ID;
์ ์ฟผ๋ฆฌ๋ฅผ natural join์ ์ฌ์ฉํ๋ฉด
select name, course_id
from student natural join takes;
์ด๋ ๊ฒ ํํ ๊ฐ๋ฅ!
์ด ๋ ๊ฒน์น๋ ID ๋ผ๋ attribute ๋ ๋ ์ค ํ๋๋ง ๋จ๋๋ค.
์ฌ๋ฌ relation์ join ํ ์๋ ์๋ค.
select A1, A2,...,An
from r1 natural join r2 natural join ... natural join rn
where P;
์กฐ์ฌํ ๊ฒ! ์ฝค๋ง ์์!
๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์ฐ๋ ค๋ฉด ๋ชจ~๋ n๊ฐ์ relation์์ attribution์ด ๊ฒน์น๋๊ฒ ์์ด์ผ ํ๋ค.
Dangerous in Natural Join
- ์ด๋ฆ๋ง ์๋ก ๊ฐ๊ณ ์๋ก ๊ด๋ จ ์๋ unrelated attributes๋ฅผ ์๋ชป ์ธ์ํด์ ํฉ์ณ๋ฒ๋ฆฌ์ง ์๊ฒ ์กฐ์ฌ!
์์
Correct version
select name, title
from student natural join takes, course
where student.course_id = course.course_id;
Incorrect version
select name, title
from student natural join takes natural join course;
takes์ ์๋ course_id์ course์ ์๋ course_id๋ ๋ค๋ฅธ ์์ด์!
์๋ชป๋ ๋ฒ์ ์ ์ด์ฉํ๋ฉด ํ์์ด ์์ ์ ํ๊ณผ๊ฐ ์๋๋ผ ๋ค๋ฅธ ํ๊ณผ ์์
์ ์๊ฐํ๋ ๊ฒฝ์ฐ tuple์ด ์ญ์ ๋ ์ ์๋ค.
Join Types
1. Inner join
- Join ํ๋ ค๊ณ ํ๋๋ฐ ํ ์ชฝ์๋ ์๋ ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋ ๋ ค๋ฒ๋ฆฐ๋ค.
2. Outer join
- loss of information์ ์ต๋ํ ํผํ๊ณ ์ ๋ง๋ extension of the join operation
- match๋์ง ์๋ tuple์ ๋ฒ๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ join ๊ฒฐ๊ณผ์ ๋ฃ์ด์ค๋ค. (๋น ๊ณณ์ null ๊ฐ์ ๋ฃ์ด์ค)
left outer join
course natural left outer join prereq
๋ผ๊ณ ํ๋ฉด course relation์๋ง ์๋ ์์ด(์ฝ๋ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์ ํ ๋ฆด๋ ์ด์ )์ ์ด์๋จ๊ณ , prereq์๋ง ์๋ ์์ด๋ ๋ฒ๋ ค์ง๋ค.
์ด ๋ ๋ ์ค ํ๋์๋ง ์์ผ๋ฏ๋ก ํฉ์น ๋ ๊ฐ์ด ์๋ attribute (blank field) ๊ฐ ์๊ธฐ๋๋ฐ ์ด ์๋ฆฌ์ null๋ก ์ฑ์์ค๋ค.course โ prereq
right outer join
course natural right outer join prereq
๋ผ๊ณ ํ๋ฉด prereq์ ์๋, ์ฆ ์ฝ๋์์ ์ค๋ฅธ์ชฝ์ ์๋ ์ ๋ง ์ด๊ณ ์ผ์ชฝ์ ์๋ course๋ ๋ฒ๋ ค์ง๋ค.
course โ prereq
- full outer join
course natural full outer join prereq
์๋ ์ด์ ์ ์ชฝ ๋ค ์ด์ ๋จ์!!
Views
์ค์ relation์ ์๋์ง๋ง ์ค์ relation ์ฒ๋ผ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๊ฒ virtual relation์ ์ ๊ณตํ๋๋ฐ ์ด๊ฒ์ view๋ผ๊ณ ํ๋ค.
์ด๋ ๊ฒ view ๋ฅผ ๋ง๋ ๋ค.
create view v as <query expression>;
์ด๋ ์ค์ relation์ด ์๋๋ผ ๋ณด๊ธฐ ์ํ ์์ relation !
view๋ฅผ ๋ง๋ค์์ผ๋ฉด ์ฐ๋ฆฌ๊ฐ ๋ถ์ฌ์ค ์ด๋ฆ์ ์ด์ฉํด์ ์ด virtual relation์ ๋ํ๋ผ ์ ์๋ค.
view๋ ์ค์ relation์ด ์๋๋ผ ๊ทธ์ query ๋ฌธ ๋ฉ์ด๋ฆฌ๋ฅผ ์ ์ฅํ๋ค๊ณ ๋ด์ผ ํ๋ค.
(relation์ ๋ณต์ฌํด์ ๊ฐ์ง๊ณ ์๋ ๊ฑฐ๋ผ๋ฉด ์๋ ๊ธฐ์กด relation์์ ๋ณ๊ฒฝ์ฌํญ ์๊ธฐ๋ฉด ๋ชจ๋ ํ์ relation์ ๋ค ๋ฐ๊ฟ์ค์ผ ํ๋ค.
๊ตณ์ด ์ด๋ ๊ฒ ์ํ๊ณ query๋ฌธ๋ง ์ ์ฅํด๋๊ณ ๊ณ์ ์ฐ๋ ๊ฒ)
์๋ฅผ ๋ค์ด ๋ณด์
create view faculty as
select ID, name, dept_name
from instructor;
์ด๋ ๊ฒ view๋ฅผ ๋ง๋ค์ด ๋๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ธ ์ ์๋ค.
select name
from faculty
where dept_name = 'Biology';
์ด๋ ๊ฒ ์ธ ์๋ ์๋ค.
create view departments_total_salary(dept_name, total_salary) as
select dept_name, sum (salary)
from instructor
group by dept_name;
๋, view๋ฅผ ๋ง๋ค ๋ ๋ค๋ฅธ view๋ฅผ ๊ฐ์ ธ๋ค ์ธ ์ ์๋ค.
create view physics_fall_2017 as
select course.course_id, sec_id, building, room_number
from course, section
where course.course_id = section.course_id
and course.dept_name = 'Physics'
and section.semester = 'Fall'
and section.year = '2017';
create view physics_fall_2017_watson as
select course_id, room_number
from physics_fall_2017
where building = 'Watson';
Materialized View
- ํน์ database system์์๋ view relation์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ์ฅํ๊ธฐ๋ ํ๋ค.
- view ๋ง๋ค ๋ physical copy๋ณธ์ด ์์ฑ๋จ
์ด๋ฌํ view๋ฅผ Materialized view๋ผ๊ณ ํจ
- view ๋ง๋ค ๋ physical copy๋ณธ์ด ์์ฑ๋จ
- ๋ง์ฝ ์๋ relation์ด update ๋๋ฉด, materialized view result๋ ์์ ๋ฒ์ ์ ๋จธ๋ฌด๋ฅด๊ฒ ๋จ
๋ฐ๋ผ์ ์๋ relation์ด update ๋ ๋ ๋ง๋ค view๋ฅผ ์ ๋ฐ์ดํธ ํด์ ์ ์งํด์ผ ํ๋ค.
Update of a view
์ฐ๋ฆฌ๊ฐ ์๊น ๋ง๋ faculty๋ผ๋ view์ ๊ฐ์ ์ถ๊ฐํด๋ณด์
insert into faculty
values ('30765' , 'Green', 'Music');
์ด view๋ instructor relation์์ ๋ถํฐ ์์ผ๋, salary attribution์ ์๋ relation์
์ด ๋ ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ง ์ ํ์ ํ ์ ์๋ค.
- Reject the insert
- ๋น ๋ถ๋ถ์ null๋ก ์ฑ์์ ์๋์ relation์๋ ์ถ๊ฐ
๊ทธ๋๋ง ์ด๊ฑด ์๋ฐ์ด๋ค...
create view instructor_info as
select ID, name, building
from instructor, department
where instructor.dept_name = department.dept_name;
์ด ๊ฒฝ์ฐ insert๋ฅผ ํ๊ณ ์ถ์ด์ ๋ณด๋ฉด ์ผ๋จ ๊ฐ์ ธ์จ relation์ด ๋ ๊ฐ๊ณ
ํ
์ผ๋ฌ์ ์ฌ๋ฌ department๊ฐ ์๋ค๋ฉด ์ด๋ department์ธ์ง, ํ
์ผ๋ฌ์ department๊ฐ ์๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊ฑด์ง ๊ฒฐ์ ํ ์๊ฐ ์๋ค.
create view history_instructors as
select *
from instructor
where dept_name = 'History';
์ฌ๊ธฐ์insert('25566', 'Brown', 'Biology', 100000)
๋ฅผ ๋ฃ์ผ๋ ค๊ณ ํ๋ฉด??
์ ์ด์ history ๊ณผ๋ชฉ์ธ๋ฐ biology๋ฅผ ๋ฃ์ผ๋ฉด ์๋๋ค. ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธใ ใ ๋๋ถ๋ถ์ SQL implementation์์๋ ๋จ์ํ simple view ์์๋ง update๋ฅผ ํ์ฉํ๋ค.
- from์ ์ ์ค์ง ํ๋์ relation์ด ์์ ๋
- select ์ ์๋ ์ค์ง attribute ์ด๋ฆ๋ง ์ค๊ณ , ์ด๋ค expression, aggregates, distinct specification ๋ฑ์ด ์์ ์๋๋ค.
- select ์ ์ ์๋ attribute๋ null๋ก ์ฑ์ด๋ค.
- group by๋ having clause๋ ์์ด์ผ ํ๋ค.
์ฆ ๊ฑฐ์ view update๋ ์ํ๋ค.
Transactions
"unit" of work. ์ผ๋ จ์ query ๋๋ update statements๋ก ๊ตฌ์ฑ๋จ
standard SQL์์๋ SQL statement ๊ฐ ์คํ๋๊ธฐ ์์ํ ๋ ์์์ ์ผ๋ก transaction์ ์์ํ๋ค.
Commit work : transaction์ด ์์๋๊ณ ๋์ ์๊ธด ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅํ๋ค.
Rollback work : ๋ชจ๋ update์ฌํญ์ roll back(undone)
Atomic transaction : ์์ ์คํ๋๊ฑฐ๋ ์์ ์์๋ ์ผ์ฒ๋ผ rolled back๋๋ค.(???)
Isolation from concurrent transactions (???)
begin transaction;
...
commit; or rollback;
Integrity Constraints
- Integrity constraints๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ authorized change๋ก ์ธํด data consistency๊ฐ ์์๋์ง ์๋๋ก ํจ์ผ๋ก์จ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ฐ๋ฐ์ ์ธ ์์์ ๋ง๋๋ค.
1. not null
```
name varchar(20) not null
budget numeric(12,2) not null
```
2. primary key
3. unique
- uniqe specification๋ Attributes A1, A2 ,..., Am์ด candidate key๋ฅผ ๊ตฌ์ฑํ๋ค๊ณ ๋ช ์๋์ด์๋ค.
- candiate keys๋ primary key ์ ๋ค๋ฅด๊ฒ null๋ ํ์ฉ๋จ
4. check (P) (P is a predicate)
relaton ์ ๋ชจ๋ tuple์ด ์ฃผ์ด์ง predicate P๋ฅผ ๋ง์กฑํ๋์ง๋ฅผ ๊ฒ์ฌํจ.
create table section
(course_id varchar(8),
sec_id varchar(8),
...
primary key (course_id, sec_id, semester, year),
check (semester in ('Fall', 'Winter', 'Spring', 'Summer')));
semester๋ fall, winter, spring, summer ์ค์ ๊ฐ์ด ์์ด์ผ ํจ!
Complex Check Conditions
check (time_slot_id in (select time_slot_id from time_slot))
์ด๋ ๊ฒ check clause์ ์ด๋ค subquery๋ฅผ ๋ฃ์์๋ ์๋ค.
์ด ๊ฒฝ์ฐ ๋จ์ํ ํํ์ ์ฝ์
ํ๊ฑฐ๋ ์์ ํ ๋ ๋ฟ๋ง ์๋๋ผ time_slot์ด ๋ณ๊ฒฝ๋ ๋์๋ ์ํ๋ฅผ ํ์ธํด์ผ ํ๋ค.
5. Referential Integrity
- foreign key : ๋ค๋ฅธ relatioon์ primary ํค๋ฅผ reference ํด ์ดใ
foreign key๋ SQL create table์์ ์ฌ์ฉ๋ ์ ์๋ค.
foreign key (dept_neme) references department
๊ธฐ๋ณธ ์ ์ผ๋ก foreign key๋ ๋ค๋ฅธ referenced table์ primary-key attributes๋ฅผ references ํ๋ค.
๋๋ ์ฐธ์กฐ๋ relation์ attributes๋ฅผ ๋ช
์ํด ์ค ์๋ ์๋ค.
foreign key (dept_name) references department(dept_name)
*๊ธฐ๋ณธ์ ์ผ๋ก referential-integrity๊ฐ ์ง์ผ์ง์ง ์์ผ๋ฉด action์ reject๋๋ค. *
Cascade : ์๋ relation ์ ๋ณํ๊ฐ ์๊ธฐ๋ฉด ๊ทธ relation์ ์ฐธ์กฐํด ์จ relation์ ์ ๋ณด๋ ๋ณ๊ฒฝํด ์ค๋ค.
create table course(
(dept_name varchar(20),
foreign key (dept_name) references department
on delete cascade
on update cascade
);
์ด๋ฌ๋ฉด referenced relation์์ delete๋ update ํ ๋ referencing ํ relation ๋ ๋ฐ๋๋ค
cascade ๋์ ์ด๋ฐ ๊ฒ๋ ์๋ค
- set null : ์ญ์ ๋๋ฉด null๋ก set
- set default : ์ญ์ ๋๋ฉด ๋ฏธ๋ฆฌ ์ค์ ํด ๋ default ๊ฐ์ผ๋ก set
Integrity Constraint Violation During Transactions
create table person(
ID char(10),
...
spouse char(10),
primary key (ID),
foreign key (spouse) references person);
์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ด๋ผ. ์๊ธฐ ์์ ์ reference ํ๊ณ ์๋ค.
์ด ๊ฒฝ์ฐ ๊ฒฐํผํ ์ฌ๋์ ์ถ๊ฐํ๊ณ ์ถ์ ๋, ์ด๋ป๊ฒ ํด์ผ ํ ๊น!
์ฐธ์กฐํ ์ฌ๋์ด ์์ด์ผ ํ๋๋ฐ ์ ์ชฝ ๋ค ๋์์ ์ถ๊ฐ๊ฐ ์๋๋๊น ์์ํ ๋นํ
์ด๋ธ๋ก ๋จ์์์ ๊ฒ!
์ด๋ป๊ฒ ํด์ผ ํ๋!
- ์ผ๋จ null๋ก ๋ฃ์ด๋๊ณ ๋ ์ฌ๋์ insert ํ ๋ค update ํด ์ค
- ๋๋!!!! defer constraint checking
- initially deferred : ์ปค๋ฐ ์ผ์ด๋๊ธฐ ์ ๊น์ง constraint ์ ๋ณด๊ณ ์ํํ๋ค.
- deferrable : transaction์ ์ผ๋ถ๋ก deferable์ ์ง์ ํ ํ ์ด๋ฐ query ๋ค์ ์ ํ์ ์ผ๋ก ์ฒดํฌ ์ํ๊ณ ์ํํ๋ค.
6. Assertion
์ ์ฒด database ์ ๊ท์น ์ถ๊ฐ
์ด๋ฐ ๊ท์น๋ค์ ์ถ๊ฐํ ์ ์๋ค.
- student relation์ ์๋ ๊ฐ tuple์์ tot_cred attribution ๊ฐ์ ํ์์ด ์๊ฐ ์๋ฃํ ์์ ์ ํ์ ํฉ๊ณ์ ๊ฐ์์ผ ํ๋ค.
- ๊ต์๋ ํ ํ๊ธฐ์ ๋ ๊ฐ์ ๋ค๋ฅธ ๊ต์ค์์ ๊ฐ์ ์๊ฐ๋์ ๊ฐ์ํ ์ ์๋ค.
create assertion <assertion-name> check (<predicate>);
SQL Data Types and Schemas
Built-in Data Types in sql
- date
- time
- timestamp
- interval
Large-Object Types
- blob : binary large object
- clob : character large object
- pointer๊ฐ return ๋จ
User-Defined Type
create type Dollars as numeric (12, 2) final;
์ด๋ฐ ์์ผ๋ก user๊ฐ ๋ง๋๋ก data type์ ์ ์ํ ์ ์๋ค.
(final
create table department
(dept_name varchar (20),
building varchar (15),
budget Dollars);
์๋ฐ ์์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
Domains
type์ด๋ ๋น์ทํ์ง๋ง ๋๋ฉ์ธ์ constraints๋ฅผ ๊ฐ์ง ์ ์๊ณ type์ ์๋๋ค.
create domain person_name char(20) not null;
create domain degree_level varchar(10)
constraint degree_level_test
check (value in ('Bachelors', 'Masters', 'Doctorate'));
Index Definition in SQL
database system์ด relation์ ๋ชจ๋ tuple์ ์ค์บํ์ง ์๊ณ ๋ ํด๋น attribute์ ๋ํด ์ง์ ๋ ๊ฐ์ ๊ฐ๋ tuple์ ํจ์จ์ ์ผ๋ก ์ฐพ์ ์ ์๊ฒ๋ attribute์ index๋ฅผ ๋ถ์ฌํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค.
create index <name> on <relation-name> (attribute);
create table student
(ID varchar (5),
...
primary key(ID));
create index studentID_index on student(ID);
์ด๋ ๊ฒ ๋ง๋ค๊ณ ์ฟผ๋ฆฌ ๋ ๋ฆด ๋ ๊ตณ์ด TABLE ์ ์ฒด๋ฅผ ์ฝ์ง ์๊ณ studentID_index ์์์ ๊ฒ์ํ ์ ์๋ค.
select *
from student
where ID = '12345'
Authorization
์ฐ๋ฆฌ๋ user์๊ฒ database์ ์ผ๋ถ ๋๋ ์ ์ฒด ๊ถํ์ ์ค ์ ์๋ค.
- read
- insert
- update
- delete
์ด๋ฌํ autorizations์ type๋ค์ privilege๋ผ๊ณ ํ๋ค.
Grant
Grant <privilege list> on <relation or view> to <user list>;
๋ก ์ฌ์ฉํ๋ค.
์ด๋ user list์๊ฒ relation ๋๋ view๋ฅผ privilege list(RIUD) ํ ์ ์๋ ๊ถํ์ ์ค๋ค๋ ๊ฒ!
user list ๋
- user id ์ด๊ฑฐ๋
- public ์ด๊ฑฐ๋ (๋ชจ๋ valid user)
- role ์ด ๋๋ค.
ex
grant select on department to Amit, Satoshi ;
- view ๊ถํ ์ค๋ค๊ณ ํด์ ๊ทธ view์ underlying relation์ ๋ํ ๊ถํ๊น์ง ๋ถ์ฌ๋๋ ๊ฒ์ ์๋.
- ๊ถํ์ ๋ถ์ฌํ๋ grantor๋ ์ด๋ฏธ ๊ทธ item๋ค์ ๋ํด privilege๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํจ. ์๋๋ฉด ๋๋น ๊ด๋ฆฌ์์ฌ์ผ ํจ.
Privileges in SQL
- select
- insert
- update
- delete
- all privileges
Revoking Authorization in SQL
๊ถํ ํ์
**revoke <privilege list> on <relation or view> from <user list>;
revoke select on student from U1, U2, U3;
- <previlege list>๋ revokee๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ privileges๋ฅผ revoke ์ํจ๋ค.
- <revokee-list> (public ์ด ๋ ์๋) ์ ํฌํจ๋ ๋ชจ๋ user๋ ๊ถํ์ ๋บ๊ธด๋ค.
- ๋ง์ฝ ๋์ผํ ๊ถํ์ด ๋ค๋ฅธ grantees์ ์ํด ๋ ๋ฒ ๋ถ์ฌ๋์์ ๊ฒฝ์ฐ, ์ด ์ ์ ๋ ๊ถํ์ ์ ์งํ ์ ์๋ค.
- ์ทจ์๋๋ ๊ถํ์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋ชจ๋ ๊ถํ๋ค๋ ๋ค ์ทจ์๋๋ค.
Roles
role์ ์ฌ๋ฌ ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ณํ๋ ๋ฐฉ๋ฒ! ํน์ role ์ ์ํด ๋๊ณ ๊ถํ ๋ถ์ฌํ ๋ ๊ทธ role์ ๊ถํ์ ๋ฌผ๋ ค์ค๋ค.
create role <name>;
create role instructor;
grant instructor to <users>;
์ด๋ฐ ์์ผ๋ก ์ฌ์ฉํ๋ค.
create role instructor;
grant instructor to Amit;
์ด๋ ๊ฒ amit์ instructor๋ผ๋ ๊ถํ ์ฃผ๊ณ
grant select on takes to instructor;
ํ๋ฉด instructor๋ผ๋ role์ ๊ฐ์ง ๋ชจ๋ user์๊ฒ ๊ถํ์ด ๋ถ์ฌ๋๋ค.
create role teaching_assistant;
grant teaching_assistant to instructor;
์ ํด์ฃผ๋ฉด instructor๋ ๋ค์ teaching_assistant์ ๊ถํ์ ์์๋ฐ๊ฒ ๋๋ค.
์ฆ
teaching_assistant -> instructor -> amit
Chain of roles
create role dean;
grant instructor to dean;
grant dean to Satoshi;
'๐ก๐ธ๐ธ๐ถ5: ๐ฆ๐๐๐๐ถ ๐ฐ๐๐พ๐ > Database(COSE371)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ์ดํฐ๋ฒ ์ด์ค] CH7. Relational Database Design(Normalization) (0) | 2021.12.14 |
---|---|
[๋ฐ์ดํฐ๋ฒ ์ด์ค] CH6. Database Design Using the E-R Model (0) | 2021.12.14 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] CH3. Introduction to SQL (0) | 2021.10.10 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] CH2. Introduction to Relation Model(1) (0) | 2021.10.10 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] CH1. Introduction (0) | 2021.10.10 |