Integrity Constraints

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
BC421 File and Database Lab
Advertisements

เสรี ชิโนดม MS SQLServer 7 เสรี ชิโนดม
12. การบันทึกข้อมูลลงในตาราง
จำนวน สถานะ NUMBER OF STATES. ประเด็นที่ สนใจ The number of distinct states the finite state machine needs in order to recognize a language is related.
กลุ่มคำสั่ง SQL สามารถแบ่งได้ดังนี้
Chapter 8 : Logic Modeling & Data Modeling
Security and Integrity
ภาษามาตรฐานสำหรับนิยามข้อมูล และการใช้ข้อมูล
Inductive, Deductive Reasoning ผศ.( พิเศษ ) น. พ. นภดล สุชาติ พ. บ. M.P.H.
ฐานข้อมูลและการออกแบบฐานข้อมูล
SQL Server using Transact-SQL
MySQL.
– Web Programming and Web Database
Structured Query Language (SQL)
ภาษามาตรฐานสำหรับนิยามข้อมูล และการใช้ข้อมูล
Chapter 8 : การควบคุมความปลอดภัย (Security Control)
Merchant Marine Training Centre วิชาการเป็นเลิศ เชิดชู คุณธรรม ผู้นำ.
Database Programming Exceed Camp #2 24 October 2005.
Week-4, Create, Grant, Trigger DBMS 3/53. From MySQL 5.5 Manual.
MySQL Case study about MySQL On XAMPP server Update : August 23,2012
โครงสร้างควบคุมการทำงาน
Software Engineering Project Presentation
SQL Structured Query Language.
SQL เพื่อควบคุมความปลอดภัย (Week 2). การควบคุมการเข้าถึงข้อมูล ระบบการจัดการข้อมูลโดยส่วนใหญ่จะมีกลไกที่ ทำให้แน่ใจได้ว่าเฉพาะผู้มีสิทธิเท่านั้นที่ สามารถเข้าถึงข้อมูลในฐานข้อมูล.
การสร้าง WebPage ด้วย Java Script Wachirawut Thamviset.
Chapter 3 Simple Supervised learning
การใช้ PHP ติดต่อฐานข้อมูลMySQL
SQL Structured Query Language.
ครูปัทมา แฝงสวัสดิ์. การอ่านเรื่องงานแล้ว บอกรายละเอียดและ สาระสำคัญ.
การเขียนโปรแกรมบนเว็บ PHP กับ MySQL
บทที่ 6 พจนานุกรมข้อมูล และ คำอธิบายกระบวนการ
Introduction to Computer Organization and Architecture Flow of Control ภาษาเครื่อง สายงานของการ ควบคุม.
MySQL.
Database & DBMS Architecture วรวิทย์ พูลสวัสดิ์. 2 2 ฐานข้อมูล (Database) - Data and its relation - Databases are designed to offer an organized mechanism.
1 Introduction to SQL Leon Chen. 2 3 SQL Environment Catalog  ชุดของแผนผังที่เป็นคำอธิบายของฐานข้อมูล Schema  โครงสร้างที่มีรายละเอียดของวัตถุที่สร้างขึ้นโดยผู้ใช้
Chapter 2 Relational Database
ประชุมเชิงปฏิบัติการพัฒนาชุดคำสั่งประมวลผลข้อมูล
ประเภทของคำสั่งของภาษา SQL
Everything that has a beginning has an end…
Database Design & Development
ภาษา SQL (Structured Query Language)
SQL Structured Query Language.
หลักการและความรู้ทั่วไปเกี่ยวกับการบัญชี
SQL (Structured Query Language)
Chapter 5 Database Design
SQL (Structured Query Language)
บทที่ 4 แบบจำลองฐานข้อมูลเชิงสัมพันธ์ Relational Database
Toward National Health Information System
INC 161 , CPE 100 Computer Programming
SQL (Structured Query Language)
Part 8 Overcoming Discouragement
Database Concurrency Control and Security
Chapter 6 : แบบจำลอง E-R (Entity-Relationship Model)
Chapter 9 : ภาษาทางด้านฐานข้อมูลคำสั่ง SQL (SQL Command)
คำอธิบายรายวิชา การเขียนผังงาน รหัสเทียม ตรรกศาสตร์เบื้องต้น การเขียนโปรแกรมคอมพิวเตอร์แบบโครงสร้าง ชนิดตัวแปร ตัวดำเนินการทางตรรกะ ตัวดำเนินการเปรียบเทียบ.
การออกแบบระบบ System Design.
บทที่ 1 ความรู้เบื้องต้น เกี่ยวกับระบบสารสนเทศ
Principles of Accounting II
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 04: การวิเคราะห์หาความซับซ้อนด้านเวลา ในรูป.
Review of the Literature)
เรื่อง การวิเคราะห์และออกแบบฐานข้อมูล MySQL Database
โครงสร้างข้อมูล( Data Structure)
Injection.
คำสั่งสร้างฐานข้อมูล
การวิเคราะห์และออกแบบขั้นตอนวิธี
AnalyticAL Writing ปิติ ตรีสุกล.
Integrated Mathematics
โครงการสัมมนาเชิงปฏิบัติการบูรณาการภาครัฐและเอกชนในการจัดยุทธศาสตร์เศรษฐกิจภาคตะวันออก This template can be used as a starter file to give updates for.
ฐานข้อมูลเชิงสัมพันธ์ Relational Database
[ บทที่ 1 ] ระบบฐานข้อมูล
ใบสำเนางานนำเสนอ:

Integrity Constraints

Integrity Constraints หมายถึงกรรมวิธีที่ DBMS อนุญาตให้ผู้ใช้ ใส่กฎเกณฑ์ลงไปบนฐานข้อมูลเพื่อให้แน่ใจว่าข้อมูลจะถูกต้อง กล่าวคือข้อมูลอยู่ภายใต้กฎเกณฑ์ตามที่ผู้ใช้กำหนด ภายหลังจากที่มีการเปลี่ยนแปลงเกิดขึ้น การเปลี่ยนแปลงที่ว่านี้ อาจเป็นการแก้ไขข้อมูล ลบข้อมูลเดิม การเพิ่มข้อมูลใหม่ การใส่ Integrity Constraints เพื่อเป็นการบอกให้ DBMS ทราบถึงข้อกำหนด เงื่อนไขในการให้ค่าที่เป็นไปได้กับตัวข้อมูลเพื่อป้องกันการ update ค่าที่ไม่ตรงตามกฎเข้าไปในฐานข้อมูล

การควบคุมความคงสภาพความถูกต้อง กฎเกณฑ์ควบคุมความคงสภาพความถูกต้อง แบ่งลักษณะการควบคุมออกเป็น 3 ประเภท Domain Constraints Referential Integrity Triggers

Domain Constraints เป็นการใส่กฎเกณฑ์ควบคุมความคงสภาพขั้นพื้นฐานที่สุด เพราะเป็นการใส่กฎเกณฑ์เพื่อกำหนด data type และเพื่อกำหนดขอบเขตของค่าต่างๆ ที่เป็นไปได้ให้กับ attributes ดังนั้น หากมีการ insert หรือ update ฐานข้อมูล DBMS จะทำการตรวจสอบว่าค่าใหม่นั้นอยู่ในกรอบของ domain หรือไม่

Referential Integrity คือการตั้งกฎเกณฑ์ควบคุมความคงสภาพความสัมพันธ์ระหว่าง primary key ของรีเลชั่นหนึ่ง กับ foreign key ของอีกรีเลชั่นหนึ่ง Referential Integrity: Basic Concept กฎเกณฑ์ควบคุมความคงสภาพระบุว่า ถ้ามี 2 รีเลชั่น (r กับ s) ที่มีความสัมพันธ์กัน ถ้าในรีเลชั่น s ซึ่งมี foreign key อันเป็นคีย์นอกที่อ้างอิงถึงคีย์หลักในรีเลชั่น r ดังนั้นสำหรับทุก ๆ ค่าของ foreign key ใน s จะต้องมีค่าเท่ากับค่าของ attributes ที่ถูกกำหนดเป็นคีย์หลักใน tuple ใด tuple หนึ่ง บนรีเลชั่น r ถ้าสมมุติมีการ natural Join ของ r กับ s อาจเกิดกรณีที่ว่าบางแถว (tr) ในรีเลชั่น r ไม่มีคู่ join กับแถว (ts) ใน s กล่าวคือ There is no ts such that tr[R  S] = ts[R  S] เราเรียกแถวที่ join กับแถวอื่นในอีกรีเลชั่นหนึ่งไม่ได้เลยว่า dangling tuples.

 (r2)  k (r1) กฎการอ้างอิง สามารถเขียนได้ว่า foreign key ของ r2 ต้องเป็น subset ของ Primary key ของ r1 ความสำคัญชองกฎข้อนี้คือ เมื่อมีการอ้างอิงจากรีเลชั่นหนึ่งไปยังอีกรีเลชั่นหนึ่งแล้ว ระบบการจัดการฐานข้อมูลต้องรับประกันว่าข้อมูลในรีเลชั่นทั้ง 2 จะต้องมีตัวตนเสมอ

Triggers Triggers are rules managed by a DBMS. Because a trigger involves an event, a condition, and a sequence of actions, it also is known as an event-condition-action rule. Writing the action part or trigger body is similar to writing a procedure or a function except that a trigger has no parameters. Triggers are executed by the rule system of the DBMS not by explicit calls as for procedures and functions. Triggers เป็น stored Procedure ประเภทหนึ่งซึ่งจะ effect ทุกครั้งที่มีการเปลี่ยนแปลงข้อมูลภายในตารางเกิดขึ้น ทั้งนี้เป็นผลมาจากการทำ Insert, Update และ Delete การทำงานของ Triggers จะคล้ายกับการปลุกเพื่อให้มีการทำงานเกิดขึ้นตามเหตุการณ์ที่เกี่ยวข้องกับการเปลี่ยนแปลงข้อมูล Triggers ควรถูกใช้ในเรื่องของการดูแลข้อมูลให้ถูกต้องทั้ง Data Integrity และ Referential Integrity ตลอดจนในส่วนของ Encapsulate Business Rules

Motivation and Classification of Triggers Triggers are widely implemented in DBMSs because they have a variety of uses in business applications. The typical uses of triggers :- Complex integrity constraints: Integrity constraints that cannot be declaratively specified by check constraints in CREATE TABLE statements. Transition constraints: Integrity constraints that compare the values before and after an update occurs. Update propagation: Update derived columns in related tables. Exception reporting: Create a record of unusual conditions as an alternative to rejecting a transaction.

Triggers, which are part of SQL:1999, classifies triggers by granularity, timing, and applicable event. For granularity, a trigger can involve each row affected by an SQL statement or an entire SQL statement. Row triggers are more common than statement triggers. For timing, a trigger can fire before or after an event. Typically, triggers for constraint checking fire before an event, while triggers updating related tables and performing other actions fire after an event. For applicable event, a trigger can apply to INSERT, UPDATE, and DELETE statements.

ระบบจะ execute คำสั่ง Trigger โดยอัตโนมัติ ขณะมีการปรับปรุงฐานข้อมูล การออกแบบกลไก Trigger เราต้องระบุ 1. ระบุเงื่อนไขการทำงานให้กับ Trigger 2. ระบุผลลัพธ์ที่ต้องการ และลำดับขั้นตอนการทำงานเพื่อให้ได้ผลลัพธ์นั้น ตัวอย่างการทำงานของ Triggers สมมุติให้ธนาคาร อนุญาตให้ลูกค้าเบิกเงินเกินบัญชี แต่ไม่ต้องการให้มียอดเงินฝากในรีเลชั่น account เป็นค่าติดลบ ดังนั้น ธนาคารอาจจัดการในลักษณะที่ตัดบัญชีเงินฝากของลูกค้าผู้นี้ให้เป็น 0 และทำการเพิ่มเรคอร์ดของลูกค้าเข้าไปในรีเลชั่น loan และ borrower โดยทางธนาคารจะนำเอาเลขที่บัญชีเงินฝาก (account_number) มาทำป็นเลขที่เงินกู้ (loan_number) และนำยอดที่เกินบัญชีมาลงไว้เป็นจำนวนเงินกุ้ จากตัวอย่างนี้ เงื่อนไขในการรัน Trigger คือ การทำการ update รีเลชั้น account เฉพาะแถวที่มีจำนวนเงินbalance เป็นค่าติดลบ

ทำความเข้าใจตาราง INSERTED และ DELETED เมื่อมีการทำงานร่วมกับ Triggers จะเกิดตารางชั่วคราวพิเศษ 2 ตารางคือ Inserted และ Deleted โดยเก็บอยู่ที่หน่วยความจำและจะใช้งานได้เพียงภายในช่วงระยะการทำงานของ Triggers หนึ่งๆ เท่านั้น สำหรับตารางที่กล่าวถึงนี้ เป็นตารางเปล่าที่ยังไม่มีข้อมูลใดๆ แต่จะมีโครงสร้างทั้งชื่อและจำนวนคอลัมน์ ตลอดจนประเภทของข้อมูลเหมือนกันกับตารางที่ Triggers อาศัยอยู่ทุกประการ ในแต่ละครั้งของการเกิดเหตุการณ์ที่เกี่ยวข้องกับการเปลี่ยนแปลงแก้ไขข้อมูลจะเป็นให้มีการเพิ่มแถว ข้อมูลให้กับตารางพิเศษ ดังนี้ INSERT เมื่อมีการเพิ่มแถวข้อมูลให้กับตารางข้อมูลที่ Triggers อาศัยอยู่ ระบบจะเพิ่มแถวข้อมูลเดียวกันนี้ไปยังตาราง INSERTED ด้วย DELETE เมื่อมีการลบแถวข้อมูลออกจากตารางข้อมูลที่ Triggers อาศัยอยู่ ระบบจะเพิ่มแถวข้อมูลที่ถูกลบออกนี้ ไปเก็บไว้ยังตาราง DELETED ด้วย UPDATE เมื่อมีการอัพเดทข้อมูลในตารางข้อมูลที่ Triggers อาศัยอยู่ ระบบจะทำงาน 2 ขั้นตอน กล่าวคือ มีการนำแถวข้อมูลก่อนการอัพเดทไปเก็บไว้ โดยเพิ่มแถวข้อมูลดังกล่าวไปเก็บไว้ยังตาราง DELETED ก่อน จากนั้นระบบจะนำแถวข้อมูลที่ได้ถูกแก้ไขเรียบร้อยแล้วไปเก็บไว้ยังตาราง INSERTED ด้วย ตารางพิเศษที่เก็บข้อมูลเนื่องจากการใช้คำสั่ง INSERT, DELETE, และ UPDATE นี้ ช่วยให้ Triggers มีความสามารถในการตรวจสอบข้อมูลและดักจับการทำงานได้ตามต้องการ

CREATE TRIGGER borrow_insert on borrow for insert as update book BookID BookName avail B01 Finance Y B02 Accounting B03 Database B04 Network B05 Compiler CREATE TRIGGER borrow_delete on borrow for delete as update book set avail = 'Y' where bookID in (select bookID from deleted); Create Trigger Book_Update On book For update As If update (BookID) Begin Update borrow Set BookID = (Select BookID from inserted where BookID in (Select BookID from deleted)) CREATE TRIGGER borrow_insert on borrow for insert as update book set avail = 'N' where BookID in (Select BookID from inserted);

ตัวอย่าง Triggers ที่ช่วย automate application ตาม business logic ทั่วๆไป //create trigger overdraft_trigger after update of balance on account Create trigger overdraft_trigger after update on account Referencing new row as nrow For each row When nrow.balance < 0 Begin atomic insert into borrower (select customer_name, account_number from depositor where nrow.account_number = depositor.account_number) insert into loan values (nrow.account_number, nrow.branch_name, -nrow.balance) update account set balance = 0 where account.account_number = nrow.account_number end

CREATE TRIGGER tr_InsUpdtmpSales On tmp_sales for insert, update as declare @quantity int select @quantity = i.qty from inserted as i if @quantity < 20 begin print 'No record to insert or update' print 'Because quantity must more than 20' rollback transaction end

CREATE TRIGGER tr_InsUpdtmpSales2 On tmp_sales for update as if update(qty) declare @quantity int select @quantity = i.qty from inserted as i if @quantity < 20 begin print 'No record to insert or update' print 'Because quantity must more than 20' ROLLBACK TRANSACTION end else print 'Triggers not done because qty column is not updated'

CREATE TRIGGER tr_DeltmpSales On tmp_sales for delete as DECLARE @quantity int Select @quantity = d.qty from deleted as d if @quantity > 30 begin print 'No record to be deleted' print 'Because quantity more than 30' rollback transaction end

การทำ Cascading Delete ด้วย Triggers Trigger มีประโยชน์อย่างมากในเรื่องของการทำ Cascading Delete กล่าวคือเมื่อมีการลบแถวข้อมูลจากตารางหลักแล้ว แถวข้อมูลของตารางรองที่มี Foreign key เชื่อมกับ Primary key ของตารางหลักจะถูกลบตามไปด้วย CREATE TRIGGER tr_DeltmpOrders On tmp_orders for delete as delete tmp_orderdetails from deleted as d where tmp_orderdetails.orderid = d.orderid; CREATE TRIGGER tr_DeltmpOrderDetails On tmp_orderdetails declare @rowcount int raiserror ('%d rows are going to be deleted from tmpOrderDetails', 0, 1, @rowcount)

CREATE TRIGGER tr_DelTitle on tmp_titles after delete as delete tmp_titleAuthor from tmp_titleAuthor tmta, deleted d where tmta.title_id = d.title_id print 'Deleted from tmp_titleauthor Table‘ CREATE TRIGGER tr_DelTitleAuthor on tmp_titleauthor After delete as delete tmp_authors from tmp_authors tma, deleted d where tma.au_id = d.au_id print 'Deleted from tmp_authors Table'

CASE STUDY