คุณสมบัติของ view file · web...
TRANSCRIPT
การสรางและการจดการ Database Objects อนๆ
จากบททผานมา เราไดทราบกนแลววาวตถตางๆในฐานขอมล (Database Objects) ประกอบไปดวยอะไรบางนน ในบททจะกลาวถง Objects ทเหลอ ซงไดแก
วตถ การใชงานView ใชสำาหรบดงขอมลออกมาโชวแตไมสามารถ
จดการกบขอมลไดSequence ใชสำาหรบการสรางคยหลก (PK) ใชในการนอ
มอลเรตIndex ชวยใหการควร(Query) ขอมลมประสทธภาพ
มากขนSynonym ใชสำาหรบการตงชอใหกบวตถ (object) ตวอน
ๆ
คำาสงทใชในการเรยกด รายการ object ในฐานขอมล Oracle
การเรยกดรายการ object ทงหมดในฐานขอมล Oracle (เชน table, view ฯลฯ) สามารถเรยกดไดจาก view ทชอวา ALL_OBJECTS ตวอยางคำาสงคอทใชเรยกดคอ
SELECT * FROM ALL_OBJECTS;
โดยคำาสงนจะแสดงรายการ object ทงหมดทม
แตในการใชงานสวนใหญ อาจจะตองการเจาะจงดแคบางเงอนไข เชน ตองการดรายการ table ทงหมด โดยเจาะจงแค schema ใด schema หนงเทานน ซงสามารถใชเงอนไขจากฟลดตอไปน คอ OBJECT_TYPE เปนการเรยกดตามเงอนไขของประเภท object เชน หากตองการดเฉพาะ table จะใชเงอนไขเปน WHERE OBJECT_TYPE = ‘TABLE’OWNER เปนการเรยกดเฉพาะเจาะจง schema ใด schema หนง เชน ตองการเรยกดขอมลจาก schema ชอ SCOTT จะใชเงอนไขเปน WHERE OWNER = ‘SCOTT’
ตวอยางคำาสงเตม ๆ กรณทตองการเรยกดเฉพาะ table ทงหมดทอยใน schema ทชอ SCOTT
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE=’TABLE’ AND OWNER=’SCOTT’;
Database Objects – VIEW
จากการใชงาน SQL Select statement จะเหนวา ในบางครงเรามกจะม Select statement ทตองใชงานประจำาเพอดงขอมลออกมาในรปแบบทตองการ เราสามารถใช SQL View นชวยได โดย SQL View จะทำาการเกบรปแบบการ query หรอ SQL Select statement ทเราตงไวใน SQL View ซงสามารถทำาไดตงแต query ขอมลทงหมดของ table รวมถงการทำา SQL Join, SQL Union, SQL Intersect และ SQL Except ทผลลพธออกมาในรปแบบตาราง หรอ table
คณสมบตของ VIEW
สรางโครงสรางของขอมลในรปแบบท user ใชงานปกตจาก table
ปรบเปลยนขอมลภายใน table ใหแสดงออกมาในรปแบบทตองการ โดยไมกระทบกบขอมลหลก
สรปขอมลจาก table ในรปแบบของ report ท user ตองการ
รปแบบการสราง VIEW (Syntax)
การใชงาน SQL View สามารถสรางไดจากรปแบบของ SQL Select statement ทตองการ โดยสามารถสรางจาก table เดยว หรอ หลาย table กได แตตองมสทธในการเขาถงขอมลภายใต table นน (GRANT VIEW)
CREATE VIEW view_name ASSELECT column1, column2.....FROM table_nameWHERE [condition];
ตวอยางคำาสง VIEW TABLETable – CUSTOMERS
ทำาการสราง VIEW จากการ Select 2 col ไดแก name, age ซงเปนขอมลทไดมาจาก table-CUSTOMERS
CREATE VIEW CUSTOMER_VIEW ASSELECT name, ageFROM CUSTOMERS;
ผลลพธทได จากการลอง select ขอมลใน VIEW
SQL > SELECT * FROM CUSTOMER_VIEW;
กำาหนดเงอนไข WITH CHECK OPTIONWITH CHECK OPTION กำาหนดมาเพอใชงานการ CREATE VIEW statement เปาหมายของ WITH CHECK OPTION มเพอใหมนใจไดวาการ INSERT หรอ UPDATE ขอมลอยในเงอนไขของ VIEW ซงถาไมอยในเงอนไข การ INSERT หรอ UPDATE นนจะไดผล error
CREATE VIEW CUSTOMER_VIEW1 ASSELECT name, age, salaryFROM CUSTOMERSWHERE age IS NOT NULLWITH CHECK OPTION;
ดวยเงอนไข WITH CHECK OPTION จะเหนวาขอมล column age หามมคาเปน NULL
การ UPDATE VIEW
View จะสามารถ update ภายใตเงอนไข statement ดงน SELECT clause หามใช DISTINCT, summary
function, set function, set operator, ORDER BY FROM clause หาม JOIN table WHERE clause หามใชรวมกบ subquery หามใชงาน GROUP BY และ HAVING NOT NULL column ทงหมดจะตองอยใน VIEW ดวยเพอให
INSERT function ทำางานถกตอง
ถาเงอนไขทงหมดถกตอง เราจงสามารถใชงาน SQL VIEW update ได
ตองการแกไขขอมลของ Ramesh ใหมอายเทากบ 35
UPDATE CUSTOMER_VIEW SET AGE = 35 WHERE name = 'Ramesh';
ผลลพธทได
การ INSERT VIEW
ใชเงอนไขเดยวกบ UPDATE VIEW ซงจากตวอยาง เราไมสามารถทำาการ INSERT VIEW บน CUSTOMERS_VIEW นไดเพราะ column ทงหมดของ VIEW ไมไดมเงอนไข NOT NULL ทงหมด
การ DELETE VIEW
ใชเงอนไขเดยวกบ UPDATE VIEW และ INSERT VIEWทำาการลบขอมลของคนทมอาย 22 ออกจาก VIEW
คำาสง
DELETE FROM CUSTOMER_VIEW WHERE age = 22;
ผลลพธทได
รปแบบการลบ VIEW (Syntax)
DROP VIEW view_name;
ตวอยางการ DROP VIEW
DROP VIEW CUSTOMER_VIEW;
Database Objects – Sequence
บางครงการทำางานเกยวกบการจดเกบขอมลลง Table จะมขอมลบางสวนทถกจดเกบแบบ Sequence ซงสวนใหญจะเปนขอมลจำาพวก Id ตางๆ ถาเปน Access กจะม Auto running number ให หรอ worst case เรากจะ Select Id ลาสดมา แลวบวกเขาไป 1 แลวจดเกบลงไปอกท
รปแบบคำาสงการสราง Sequence
ตวอยางคำาสงการสราง Sequence
CREATE SEQUENCE sequence_name MINVALUE value [MAXVALUE value] START WITH value INCREMENT BY value CACHE value;
ตวอยางดานบนคอการสราง sequence ชอ CUSTOMER_seq โดยเรมตนคาท 1 และเพมคาทละ 1 (ie: 2,3,4,..) และจะมการดงขน cache ทละ 20 คา ซงจะชวยในสวนของ performance.
ถาเราไมใส คา MAXVALUE sequence ทเราสรางขนจะ default เปน:
MAXVALUE 999999999999999999999999999
ดงนน เราสามารถทจะสราง sequence แบบงายๆ ดวยคำาสงดานลาง :
หลงจากททำาการสราง sequence เสรจเรยบรอย สำาหรบการเรยกใช เราจะเรยกโดยใชคำาสง .nextval
ตวอยางคำาสงการใชงาน Sequence
CREATE SEQUENCE CUSTOMER_seq MINVALUE 1 MAXVALUE 999999999999999999999999999 START WITH 1
CREATE SEQUENCE CUSTOMER_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20;
CUSTOMER_seq.nextval;
คำาสงดานบนจะทำาการดงคาจาก CUSTOMER_seq โดยเราสามารถนำา .nextval มาใชใน SQL statement. ไดตามตวอยางดานลาง
ตวอยางการประยกตใช SEQUENCE รวมกบคำาสง INSERT
ตวอยางดานบน จะทำาการ insert new record ลงใน table CUSTOMERSสำาหรบ column id จะเกบคาทเราดงมากจาก sequence CUSTOMER_seq และ column name จะเกบเปน Kraft
การลบ Sequence ออกจากฐานขอมล Oracle (Drop Sequence)
รปแบบคำาสงการลบ Sequence
ตวอยางคำาสงการลบ Sequence
INSERT INTO CUSTOMERS (id, name)VALUES
DROP SEQUENCE sequence_name;
DROP SEQUENCE CUSTOMER_seq;
Database Objects – Index
การทำา Index ของ Database มประโยชนในการคนหาขอมล Query ไดรวดเรว โดยการคนหาจะเปนการกระโดดไปยงตำาแหนงทตองการไดเลย ทำาใหไมจำาเปนทจะตองคนหาหมดทก Row ทำาให Query ไดเรวกวาเดมมาก
คำาสงสราง Index (CREATE INDEX)SQL Create index statement
CREATE INDEX index_name ON table_name;
การเลอกใช SQL index แตละแบบ จะขนอยกบรปแบบการใชงาน SQL Select query statement วาสวนของ Where Clause สวนมากใชงานกบ column ไหน กควรจะตองทำา index column นน หรอถามการทำาเงอนไขหลาย column รวมกน กควรใช composite index
1. Index แบบ 1 column (Single-Column Indexes)
CREATE INDEX index_nameON table_name (column_name);
2. Index แบบไมซำา (Unique Indexs)มผลตอประสทธภาพในการ query หรอ select ขอมลทรวดเรว เพราะขอมลจะตองไมซำากน
CREATE UNIQUE INDEX index_nameON table_name (column_name);
3. Index แบบหลาย column (Composite Indexs)
CREATE INDEX index_nameOn table_name (column1, column2);
4. Implicit Indexsเปน index ทถกสรางขนมาอตโนมตตงแตเรมสราง table เชน ถามการกำาหนด Primary Key constraint หรอ Unique Constraint
คำาสงลบ Index (DROP INDEX)
DROP INDEX index_name;
คำาเตอน การ – drop index อาจจะทำาให performance ของการ select บางคำาสงชาลงอยางมาก เพราะฉะนนตองตรวจสอบใหแนใจกอนทำาการ drop
ขอควรระวงการใช Index
ถงแมวาการทำา index จะชวยเพมประสทธภาพของฐานขอมล หรอ database แตสถานการณการทำา index กไมมผลดเสมอไปเชน
Index ไมควรทำาใน table ทมขอมลนอย Table ทมการทำา insert หรอ update บอยๆ ดวยขอมล
จำานวนมาก Index ไมควรทำากบ column ทมคา NULL จำานวนมากใน
column Column ทมการปรบเปลยนโครงสรางบอยๆ ไมควรทำา
index
ตวอยางการใชงาน Index
1. ถาจะสรางตาราง โดยจะใช field ทเราใชเปนเงอนไขในการ query บอยๆ กสามารถสรางตารางไดเลย เชน
CREATE TABLE MyTransactionLogs(myKey INT AUTO_INCREMENT NOT NULLmyIndex TIMESTAMP NOT NULLdata1 VARCHAR(100)data2 VARCHAR(100)data3 VARCHAR(100)etc VARCHAR(255)PRIMARY KEY(myKey)INDEX (myIndex));
2. ถาตองการปรบปรงตาราง ทสรางไปแลว เพอจด index ใหขอมลในฟลด myIndex ถา myIndex ไมไดสงใหเปน index ตงแตตอนสรางตาราง กสามารถใชคำาสง ขางลางน จะทำาให Query เรวขนมาก
การจดการ index ของตารางทมฐานขอมลอยแลว จะเปนการนำาขอมลทงหมดของฟลดทเราตองการจด index มาจดเรยง ทำาใหเราตองเสยพนท (disk space) ในการจดเกบขอมลเพมขน ดงนนจงไมควรจด index ใหกบทกฟลดในตาราง ซง Field ทควรจดเกบควรมคณสมบตดงตอไปน
Field ทใชเปนเงอนไขในการคนหาขอมล (เวลา query อยหลง WHERE กคอ Field ทควรทำา Index)
จด index ใหกบฟลดทใชในการจดเรยง (GROUP BY, ORDER BY)
จด index ใหกบ Foreign Keys ทเราเอาไว JOINและขนตอนในการจด index จะใชเวลาพอสมควรขนอยกบจำานวนของขอมลวามมากนอยเพยงใด แตถามขอมลเปนหลก ลาน หรอมากกวานนกจะใชเวลามากขน
โดยขณะทกำาลงจด index อย ตารางจะถก locked ไว เพอไมใหใครมา insert/update/delete ได ถาตารางขอมลกำาลงรนอยท
ALTER TABLE MyTransactionLogs ADD INDEX(myIndex);
production และตองมการใชงานอยตลอดเวลา คณอาจจะเลยงไปทำาตอนทม traffic การใชงานนอย เชน ชวงต 3 - ต 4 ซงเปนชวงน traffic นอยทสด
Database Objects – Synonym
Synonym สรางขนเพอเปนชอเลนของ Database Object ตวอนๆเพอความสะดวกในการอางถง เรามกจะสราง Synonym ใหมชอสนกวาชอของ Database Object ทเราตองการอางถง โดยท Synonym ม 2 ประเภท คอ
1. Private Synonym สรางขนและถกเรยกใชภายใตผใชทเปนคนสราง
2. Public Synonym สรางขนและกำาหนดใหผใชอนๆ (อนๆทไดรบสทธการใช) สามารถเรยกใชไดดวย
คำาสงสราง Synonym (CREATE Synonym)SQL Create synonym statement กอนอนตอง
connect by SYSTEM กอน เพอใหม Permission ถงทจะสราง Synonym ได
โดยท OBJECT คอ ชอ Database Object ทตองการสราง Synonym เพออางถง
ตวอยางการใชคำาสงสราง Synonym
CREATE [PUBLIC] SYNONYM SYNONYM_NAMEFOR OBJECT
เมอทำาการ Create Synonym สำาเรจแลว ระบบจะแสดง message "synonym emp created." เปนการสราง synonym ชอ emp สำาหรบการอางองถงตาราง Employees
ตวอยางการใชงาน Synonym
เปนการเรยกดขอมลในคอลมน employee_id, first_name จากตาราง employees แตอางถง table ชอ employees โดยใช Synonym ชอ emp
คำาสงลบ Synonym (Drop Synonym)
DROP SYNONYM TABLE
ตวอยางการใชคำาสงลบ Drop Synonym
เมอทำาการลบ Synonym สำาเรจ ระบบจะแสดง message "synonym emp dropped."
Select employee_id, first_nameFrom emp;
DROP SYNONYM SYNONYM_NAME;
CREATE SYNONYM emp FOR EMPLOYEES;
DROP SYNONYM emp;