LEC 01: ทบทวนความรู้เรื่องระบบ SAYAN ... ·...

Preview:

Citation preview

www . i t s c i .m ju . ac . t h / sayan

LEC 01: ทบทวนความร เรองระบบฐานขอมลเชงสมพนธ (RDBMS)

SAYAN UNANKARD1/2558

2

ฐานขอมลเชงสมพนธ

• ฐานขอมลทมโครงสรางขอมลในแบบเชงสมพนธ ไดรบการพฒนาขนจากแบบจ าลองทกลาวถงความสมพนธระหวางขอมลทมชอวา โมเดลเชงสมพนธ (relational model) ขอมลทจดเกบอยในฐานขอมลทมโครงสรางขอมลในแบบเชงสมพนธ จะถกแยกจดเกบออกเปนหนวยยอย ๆ ทเรยกวาตาราง

• ขอมลจะถกจดเกบในรปแบบของตาราง ซงภายใน ตารางจะแบงออกเปน แถว และ คอลมน

คยหลก (PRIMARY KEY) และ คยรวม (COMPOSITE KEY)

จากรเลชน ของนกศกษา จะแสดงขอมลของนกศกษา 1 คน ตอ 1 แถว ดงนนจะมกลมของคอลมนทไมซ ากนเลย และสามารถใชเจาะจงถงแถวของนกศกษาคนใดคนหนงได เรยกคอลมนนวา คยหลก

จะเรยกคยหลกทประกอบดวยคอลมนมากกวาหนงคอลมนวา คยรวม

sid name login age gpa

53666 Jones jones@cs 18 3.4

53688 Smith smith@eecs 18 3.2

53650 Smith smith@math 19 3.8

sid semester Gpa Fee

53666 1/2545 3.4 15,000.00

53666 2/2545 3.2 12,320.00

53650 1/2545 3.8 15,000.00

คยคแขง (CANDIDATE KEYS)

ในรเลชนทวไป อาจจะพบวามคอลมนทมคณสมบตทจะเลอกมาเปนคยหลก จะเรยกกลมคอลมนเหลานวา คยคแขง

คยคแขงทเหลอหลงจากเลอกคยหลกแลวจะเรยกวา คยส ารอง (Alternate Key)

sid name idcard age gpa

53666 Jones 1523566215223 18 3.4

53688 Smith 2351523624655 18 3.2

53650 Smith 3212025365856 19 3.8

คยนอก (FOREIGN KEYS)

เปนคยทใชแสดงความสมพนธระหวางรเลชน ซงเปนคอลมนหรอกลมของคอลมนทอยใน รเลชนหนงๆ ทคาของคอลมนนนๆ ไปปรากฏเปนคยหลกในอกรเลชนหนง โดยคยนอกและคยหลกของอกรเลชนหนงตองอยในโดเมนเดยวกน

คยนอกเปนคยทใชอางถงขอมลในตารางอน มกมชอและชนดขอมลเดยวกบคยหลกของตารางทตองการอางถง

sid name login age gpa

53666 Jones jones@cs 18 3.4

53688 Smith smith@eecs 18 3.2

53650 Smith smith@math 19 3.8

sid semester Gpa Fee

53666 1/2545 3.4 15,000.00

53666 2/2545 3.2 12,320.00

53650 1/2545 3.8 15,000.00

Student

Student_Semester

ENTITY - RELATIONSHIP MODEL

เปนการน าเสนอโครงสรางของฐานขอมลในระดบความคด (Conceptual Level) ออกมาในลกษณะของแผนภาพ (Diagram)

Entity

Attribute1Attribute2Attribute3

เอนตต คอ บางสงทมความส าคญทางธรกจทเกยวกบขอมลทจะตองร เปนชอทสามารถลงรายการได โดยปกตจะเปนค านาม

แอททรบวส คอ คาขอมลเดยวทเปนรายละเอยดของ เอนตต ซงอาจจะเปนค าอธบาย จ านวน คณภาพ กลม เฉพาะเจาะจง

ความสมพนธ เปนการอธบายความสมพนธระหวางเอนตต โดยปรกตจะม 2 มมมอง จะใชค ากรยาในการก าหนดความสมพนธ

ตวอยางของ แอททรบวส

Entity

EMPLOYEE

CAR

ORDER

JOB

TRANSACTION

EMPLOYMENT CONTRACT

Attribute

Family Name, Age, Shoe Size,

Town of Residence, Email, ...

Model, Weight, Catalog Price, …

Order Date, Ship Date, …

Title, Description, ...

Amount, Transaction Date, …

Start Date, Salary, ...

ตวอยางการเขยนความสมพนธ

Jobs are held by one or more employees

งานจะถกควบคมดวยพนกงานไดหลายคน

An employee has exactly one job.

พนกงานจะตองมงานรบผดชอบ 1 งาน

EMPLOYEE JOBhas

held by

การก าหนดความสมพนธ

EMPLOYEE JOBhas

held by

mandatory: optional:

Every EMPLOYEE has exactly one JOB

พนกงานทกคนจะตองมงาน 1 งาน

A JOB may be held by one or more EMPLOYEES

งานอาจจะถกควบคมโดยพนกงาน 1 หรอ หลายคนได

DATABASE OBJECTS

Logically represents subsets of data from one or more tables

View

Generates numeric valuesSequence

Basic unit of storage; composed of rows Table

Gives alternative name to an objectSynonym

Improves the performance of some queriesIndex

DescriptionObject

NAMING RULES

การตงชอตารางและคอลมน• จะตองขนตนดวยตวอกษร• จะตองยาวไมเกน 30 ตวอกษร• ประกอบดวยอกษร A–Z, a–z, 0–9, _, $, และ # เทานน• จะตองไมซ ากบชอของวตถอนๆ ในผใชเดยวกน• จะตองไมใช Oracle server–reserved word

สงทตองมคอ• ก าหนดสทธในการ CREATE TABLE

• พนทในการจดเกบ

สงทตองระบ• ชอตาราง

• ชอคอลมน ชนดของขอมล และ ขนาดของคอลมน

CREATE TABLE STATEMENT

CREATE TABLE [schema.]table(column datatype [DEFAULT expr][, ...]);

ตารางแตละตารางจะตองมเจาของเปนผสรางตาราง

หากตองการเรยกใชตารางของบคคลอน ๆ จะตองก าหนดค าน าหนาชอของเจาของ กอนหนาตารางเสมอ

REFERENCING ANOTHER USER’S TABLES

USERBUSERA

SELECT *

FROM userB.employees;

SELECT *

FROM userA.employees;

DEFAULT OPTION

การก าหนดคาเรมตนส าหรบคอลมน ระหวางทมการเพมขอมลใหม

คาตามตวอกษร นพจน หรอ ฟงกชน SQL สามารถก าหนดได

ชอคอลมนอนๆ หรอ pseudocolumn ไมสามารถใชได

ชนดขอมลของคาเรมตนจะตองตรงกบชนดขอมลของคอลมน นน ๆ

... hire_date DATE DEFAULT SYSDATE, ...

CREATE TABLE hiredates(id NUMBER(8),hire_date DATE DEFAULT SYSDATE);

insert into hiredates(id) values (1);select * from hiredate;

CREATING TABLES

การสรางตาราง

เรยกดโครงสรางของตาราง

DESCRIBE dept

CREATE TABLE dept(deptno NUMBER(2),dname VARCHAR2(14),loc VARCHAR2(13),create_date DATE DEFAULT SYSDATE);

DATA TYPES

Raw binary dataRAW and LONG

RAW

Binary data (up to 4 GB)BLOB

Binary data stored in an external file (up to 4 GB)BFILE

Date and time valuesDATE

Variable-length character data (up to 2 GB)LONG

Character data (up to 4 GB)CLOB

A base-64 number system representing the unique address of a row in its table

ROWID

Fixed-length character dataCHAR(size)

Variable-length numeric dataNUMBER(p,s)

Variable-length character dataVARCHAR2(size)

DescriptionData Type

การก าหนดเงอนไขในระดบตาราง

ชวยปกปองจากการลบขอมลในตารางหากมขอมลทขนอยกบขอมลอน ๆ

ชนดของเงอนไขมทงหมด 5 ชนด คอ• NOT NULL

• UNIQUE

• PRIMARY KEY

• FOREIGN KEY

• CHECK

http://code.function.in.th/sql/constraint

INCLUDING CONSTRAINTS

CONSTRAINT GUIDELINES

การสราง Constraint สามารถเพม ลบ ได• ALTER TABLE ชอตาราง drop constraint ชอเงอนไข;• ALTER TABLE ชอตาราง add constraint เงอนไข;

สามารถก าหนดชอเงอนไข หรอ สามารถใหออราเคลเซรฟเวอร เปนผก าหนดชอใหอตโนมต โดยมรปแบบคอ SYS_Cn

สรางเงอนไขเมอใด• สรางพรอมกนกบสรางตาราง• สรางหลงจากสรางตารางแลว

ก าหนดเงอนไขในระดบ คอลมน หรอ ตาราง

สามารถดเงอนไขทสรางไดจาก พจนานกรมขอมล (Data Dictionary)

Syntax:

Column-level constraint syntax:

Table-level constraint syntax:

DEFINING CONSTRAINTS

CREATE TABLE [schema.]table(column datatype [DEFAULT expr][column_constraint],...[table_constraint][,...]);

column,...[CONSTRAINT constraint_name] constraint_type (column, ...),

column [CONSTRAINT constraint_name] constraint_type,

Example of a column-level constraint:

Example of a table-level constraint:

DEFINING CONSTRAINTS

CREATE TABLE employees(employee_id NUMBER(6)

CONSTRAINT emp_emp_id_pk PRIMARY KEY,first_name VARCHAR2(20),...);

CREATE TABLE employees(employee_id NUMBER(6),first_name VARCHAR2(20),...job_id VARCHAR2(10) NOT NULL,CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));

1

2

เพอใหแนใจวาคาวาง (null values) จะไมถกบนทกลงในคอลมน

NOT NULL CONSTRAINT

NOT NULL constraint(Primary Key enforces NOTNULL constraint.)

Absence of NOT NULL constraint (Any row can contain a null value for this column.)

NOT NULL

constraint

NOT NULL CONSTRAINT

NOT NULL ตองระบแบบ column level เทานน

CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25) NOT NULL,email VARCHAR2(25),salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE NOT NULL,

...

เงอนไขการก าหนดไมใหบนทกขอมลในคอลมนนน ๆ ซ า

อนญาต null

UNIQUE CONSTRAINT

EMPLOYEES UNIQUE constraint

INSERT INTO

Not allowed: already exists

Allowed

UNIQUE CONSTRAINT

สามารถก าหนดไดทงในระดบ table level หรอ column level

CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25) NOT NULL,email VARCHAR2(25) ,salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE NOT NULL,

... CONSTRAINT emp_email_uk UNIQUE(email));

PRIMARY KEY CONSTRAINT

DEPARTMENTS PRIMARY KEY

INSERT INTONot allowed(null value)

Not allowed (50 already exists)

PRIMARY KEY CONSTRAINT

สามารถก าหนดไดทงในระดบ table level หรอ column level

CREATE TABLE employees(employee_id NUMBER(6) ,last_name VARCHAR2(25) NOT NULL,email VARCHAR2(25),salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE NOT NULL,

...department_id NUMBER(4),

CONSTRAINT emp_employeeid_pk PRIMARY KEY (employee_id)

CONSTRAINT emp_email_uk UNIQUE(email));

FOREIGN KEY CONSTRAINT

DEPARTMENTS

EMPLOYEES

FOREIGN KEY

INSERT INTONot allowed(9 does not exist)

Allowed

PRIMARY KEY

FOREIGN KEY CONSTRAINT

สามารถก าหนดไดทงในระดบ table level หรอ column level

CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25) NOT NULL,email VARCHAR2(25),salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE NOT NULL,

...department_id NUMBER(4),CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)REFERENCES departments(department_id) ,CONSTRAINT emp_email_uk UNIQUE(email));

FOREIGN KEY CONSTRAINT: KEYWORDS

FOREIGN KEY: ก าหนดคอลมนในตารางรอง เงอนไขในระดบตาราง

REFERENCES: ระบตารางและคอลมนในตารางหลก

ON DELETE CASCADE: การลบขอมลในตารางหลก ตารางรองจะถกลบตามโดยอตโนมต

ON DELETE SET NULL: เปลยนคา foreign key ในตารางรอง เมอตารางหลกถกลบขอมล ใหเปนคาวาง (null)

CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25) NOT NULL,

...department_id NUMBER(4),CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)REFERENCES departments(department_id) ON DELETE CASCADE

);

ก าหนดเงอนไขในแตละคอลมน เพอใหเขากบเงอนไขทก าหนด

นพจนตอไปน ไมสามารถใชในการก าหนดเงอนไขได• การอางถงค าสง CURRVAL, NEXTVAL, LEVEL และ ROWNUM

• การเรยกใช SYSDATE, UID, USER และ USERENV functions

• การควรขอมลทอางไปยงคาขอมลในแถวอน ๆ

CHECK CONSTRAINT

..., salary NUMBER(2)CONSTRAINT emp_salary_min CHECK (salary > 0),...

CREATE TABLE: EXAMPLE

CREATE TABLE employees

( employee_id NUMBER(6)

CONSTRAINT emp_employee_id PRIMARY KEY

,first_name VARCHAR2(20)

,last_name VARCHAR2(25)

CONSTRAINT emp_last_name_nn NOT NULL

, email VARCHAR2(25)

CONSTRAINT emp_email_nn NOT NULL

CONSTRAINT emp_email_uk UNIQUE

, phone_number VARCHAR2(20)

, hire_date DATE

CONSTRAINT emp_hire_date_nn NOT NULL

, job_id VARCHAR2(10)

CONSTRAINT emp_job_nn NOT NULL

, salary NUMBER(8,2)

CONSTRAINT emp_salary_ck CHECK (salary>0)

, commission_pct NUMBER(2,2)

, manager_id NUMBER(6)

CONSTRAINT emp_manager_fk REFERENCES

employees (employee_id)

, department_id NUMBER(4)

CONSTRAINT emp_dept_fk REFERENCES

departments (department_id));

UPDATE employeesSET department_id = 55WHERE department_id = 90;

VIOLATING CONSTRAINTS

Department 55 does not exist.

ค าสงในการลบขอมลน จะไมสามารถลบขอมลไดเนองจาก เงอนไขของขอมลทเปนคยนอก (department_id) ไปยงตารางอน ๆ เนองจากไมไดก าหนด DELETE CASCADE

VIOLATING CONSTRAINTS

DELETE FROM departmentsWHERE department_id = 60;

การสรางตารางโดยเพมขอมลไปดวย ซงจะเปนการผสมระหวางค าสงในการสรางตารางและค าสงควรขอมล ดงรปแบบ

จบคจ านวนคอลมนของตาราง กบ จ านวนคอลมนของควร

ก าหนดชอคอลมนและคาเรมตนใหแตละคอลมน

ปรากฎขอมลจากการ select เกบในตาราง

CREATING A TABLE USING A SUBQUERY

CREATE TABLE table[(column, column...)]

AS subquery;

CREATE TABLE dept80AS

SELECT employee_id, last_name, salary*12 ANNSAL, hire_date

FROM employeesWHERE department_id = 80;

CREATING A TABLE USING A SUBQUERY

DESCRIBE dept80

ALTER TABLE STATEMENT

การใชค าสง ALTER TABLE• ส าหรบเพมคอลมนใหม (Add new column)• ส าหรบการแกไขคอลมนทมอย (Modified column)• ก าหนดคาเรมตนของคอลมนใหม• ลบคอลมน (Drop a column)• การเปลยนชอคอลมน (Rename a column)• เปลยนตารางใหสามารถอานไดอยางเดยว (read-only)

- ALTER TABLE …. READ ONLY

RENAMING A TABLE

การเปลยนชอตาราง

การเปลยนชอคอลมน

RENAME old_table_name TO new_table_name;

ALTER TABLE tablenameRENAME COLUMN old_name TO new_name;

ALTERING TABLES

การเพมคอลมนในตาราง

Example

ALTER TABLE tablenameADD (fieldname field_specification);

ALTER TABLE Faculty ADD(start_date Date);

ALTERING TABLES

การแกไขคอลมน

Example

ALTER TABLE tablenameMODIFY (fieldname new_field_specification);

ALTER TABLE Faculty MODIFY(f_name Varchar2(50));

ALTERING TABLES

การลบคอลมน

Example

ALTER TABLE tablenameDROP COLUMN fieldname;

ALTER TABLE Faculty DROP(start_date);

ค าสงในการลบตาราง

ลบทงตารางและขอมลทงหมด ถามค าสง PURGE clause

ท าให objects ทขนอยกบตารางทลบใชไมได และ ถกลบสทธตามไปดวย

DROPPING A TABLE

DROP TABLE dept80;

Recommended