Upload
others
View
1
Download
0
Embed Size (px)
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;