ฉันกำลังอ่านพระคัมภีร์ SQL Server 2008 และฉันกำลังพูดถึงส่วนมุมมอง แต่ผู้เขียนไม่ได้อธิบายวัตถุประสงค์ของมุมมองจริงๆ ใช้ประโยชน์อะไรสำหรับมุมมอง? ฉันควรใช้พวกเขาในเว็บไซต์ของฉันและประโยชน์ของพวกเขาคืออะไร?
ฉันกำลังอ่านพระคัมภีร์ SQL Server 2008 และฉันกำลังพูดถึงส่วนมุมมอง แต่ผู้เขียนไม่ได้อธิบายวัตถุประสงค์ของมุมมองจริงๆ ใช้ประโยชน์อะไรสำหรับมุมมอง? ฉันควรใช้พวกเขาในเว็บไซต์ของฉันและประโยชน์ของพวกเขาคืออะไร?
คำตอบ:
การใช้งานอีกอย่างที่ดูเหมือนจะไม่มีคำตอบก่อนหน้านี้คือการปรับใช้การเปลี่ยนแปลงโครงสร้างตารางที่ง่ายกว่า
บอกว่าคุณต้องการที่จะเกษียณอายุตาราง ( T_OLD
) ที่มีข้อมูลสำหรับผู้ใช้ที่ใช้งานและแทนที่จะใช้ตารางใหม่ที่มีข้อมูลที่คล้ายกัน (ชื่อT_NEW
) active
แต่อย่างหนึ่งที่มีข้อมูลสำหรับผู้ใช้ทั้งการใช้งานและไม่ได้ใช้งานกับคอลัมน์พิเศษหนึ่ง
หากระบบของคุณมีคำค้นหากว่าพันล้านรายการSELECT whatever FROM T_OLD WHERE whatever
คุณมีสองทางเลือกสำหรับการเปิดตัว:
1) Cold Turkey - เปลี่ยนฐานข้อมูลและในเวลาเดียวกันเปลี่ยนทดสอบและปล่อยโค้ดจำนวนมากซึ่งมีข้อความค้นหาดังกล่าว ยากมากที่จะทำ (หรือแม้แต่ประสานงาน) มีความเสี่ยงมาก ไม่ดี
2) ค่อยเป็นค่อยไป - เปลี่ยน DB โดยการสร้างT_NEW
ตารางวางT_OLD
ตารางและแทนที่จะสร้างVIEWเรียกT_OLD
ว่าเลียนแบบT_OLD
โต๊ะ 100% (เช่นแบบสอบถามมุมมองSELECT all_fields_except_active FROM T_NEW WHERE active=1
)
วิธีนี้จะช่วยให้คุณหลีกเลี่ยงการปล่อยรหัสใด ๆ ที่เลือกจากT_OLD
ปัจจุบันและทำการเปลี่ยนแปลงเพื่อย้ายรหัสจากT_OLD
ไปยังT_NEW
ในเวลาว่าง
นี่เป็นตัวอย่างง่ายๆมีคนอื่น ๆ อีกมากมายที่เกี่ยวข้อง
ป.ล. ในทางกลับกันคุณน่าจะมีAPI ขั้นตอนการจัดเก็บแทนการสืบค้นโดยตรงจากT_OLD
แต่นั่นก็ไม่ได้เป็นเช่นนั้นเสมอไป
(คัดลอกมาจากบทช่วยสอนแรกที่เกิดขึ้นในการค้นหาของ Google (ตอนนี้ลิงก์ตายแล้ว) แต่มันมีประโยชน์ทั้งหมดที่ฉันจะพิมพ์ด้วยตัวเอง)
มุมมองมีประโยชน์ดังต่อไปนี้:
- ความปลอดภัย - ผู้ใช้สามารถเข้าถึงมุมมองได้ในขณะที่ไม่สามารถเข้าถึงตารางพื้นฐานได้โดยตรง สิ่งนี้ช่วยให้ DBA มอบเฉพาะข้อมูลที่ผู้ใช้ต้องการในขณะที่ปกป้องข้อมูลอื่น ๆ ในตารางเดียวกัน
- ความเรียบง่าย - มุมมองสามารถใช้เพื่อซ่อนและใช้คำค้นหาที่ซับซ้อนซ้ำได้
- การจำลองชื่อคอลัมน์หรือการชี้แจง - มุมมองสามารถใช้เพื่อระบุนามแฝงในชื่อคอลัมน์เพื่อให้น่าจดจำและ / หรือมีความหมายมากขึ้น
- Stepping Stone - มุมมองสามารถเป็นก้าวสำคัญในข้อความค้นหา "หลายระดับ" ตัวอย่างเช่นคุณสามารถสร้างมุมมองของแบบสอบถามที่นับจำนวนการขายที่พนักงานขายแต่ละคนทำ จากนั้นคุณสามารถสอบถามข้อมูลพร็อพเพอร์ตี้นั้นเพื่อจัดกลุ่มพนักงานขายตามจำนวนการขายที่พวกเขาทำ
เหตุผลบางประการจากWikipedia :
มุมมองสามารถให้ข้อได้เปรียบเหนือตาราง:
VIEWS สามารถใช้เป็นส่วนที่ใช้ซ้ำได้ของ SELECT / CODE ซึ่งสามารถรวมไว้ใน select / queries อื่น ๆ ที่จะเข้าร่วมและใช้ตัวกรองต่างๆได้โดยไม่ต้องสร้าง SELECT ใหม่ทั้งหมดทุกครั้ง
นอกจากนี้ยังวางตรรกะไว้ในตำแหน่งเดียวเพื่อที่คุณจะได้ไม่ต้องเปลี่ยนทั้งหมดในฐานรหัส
มองไปที่
ทางเลือกระหว่างกระบวนงานที่เก็บไว้ฟังก์ชั่นมุมมองทริกเกอร์อินไลน์ SQL
ความสวยงามหลักของมุมมองคือสามารถใช้งานได้เหมือนกับตารางในสถานการณ์ส่วนใหญ่ แต่ต่างจากตารางตรงที่สามารถสรุปการคำนวณที่ซับซ้อนมากและการรวมที่ใช้กันทั่วไปได้ นอกจากนี้ยังสามารถใช้อ็อบเจ็กต์ใดก็ได้ใน db ยกเว้นโพรซีเดอร์ที่เก็บไว้ มุมมองมีประโยชน์มากที่สุดเมื่อคุณจำเป็นต้องเข้าร่วมชุดตารางเดียวกันเสมอพูดคำสั่งซื้อพร้อมรายละเอียดคำสั่งซื้อเพื่อรับฟิลด์การคำนวณสรุปเป็นต้น
มุมมองเป็นเลเยอร์นามธรรมและทำสิ่งที่เลเยอร์นามธรรมที่ดีทำรวมถึงการห่อหุ้มสคีมาฐานข้อมูลและปกป้องคุณจากผลที่ตามมาของการเปลี่ยนแปลงรายละเอียดการใช้งานภายใน
มันเป็นอินเทอร์เฟซ
นี่คือการใช้มุมมองทั่วไปอย่างหนึ่งเพื่อ จำกัด เอนทิตีด้วยเกณฑ์บางอย่าง
ตาราง: USERS ประกอบด้วยผู้ใช้ทั้งหมด
มุมมอง: ACTIVE_USERS มีผู้ใช้ทั้งหมดไม่รวมผู้ที่ถูกระงับถูกห้ามรอการเปิดใช้งานและไม่ตรงตามเกณฑ์ใด ๆ ที่คุณอาจเลือกกำหนดในอนาคตโดยเป็นส่วนหนึ่งของข้อกำหนดที่ใช้งาน ทำให้ไม่จำเป็นต้องลบแถวใด ๆ จากตาราง USERS ของคุณหากคุณเลือกที่จะไม่ทำเนื่องจาก ACTIVE_USERS สามารถซ่อนแถวที่ไม่ต้องการได้ตลอดเวลา
ด้วยวิธีนี้คุณสามารถใช้ตารางในหน้าการจัดการผู้ใช้ของคุณ แต่ส่วนที่เหลือของแอปพลิเคชันสามารถใช้ ACTIVE_USERS ได้เนื่องจากอาจเป็นผู้ใช้เพียงรายเดียวที่สามารถดำเนินการตามกระบวนการและเข้าถึง / แก้ไขข้อมูลได้
มุมมองช่วยให้คุณสามารถรวมข้อมูลจากตารางต่างๆและจัดรูปแบบได้ (รวมเขตข้อมูลตั้งชื่อเขตข้อมูลที่มีความหมายมากขึ้น ฯลฯ ) เพื่อให้ผู้ใช้ปลายทางง่ายขึ้น พวกเขาเป็นนามธรรมของแบบจำลองฐานข้อมูล นอกจากนี้ยังสามารถใช้เพื่อให้ผู้ใช้เข้าถึงข้อมูลในตารางได้โดยไม่ต้องให้สิทธิ์เข้าถึงตารางโดยตรง
นี่คือสาเหตุหลายประการในการใช้มุมมองแทนที่จะใช้ตารางโดยตรง
เหตุผล / การใช้งานทั่วไปเล็กน้อย:
ใช้เพื่อเปลี่ยนรูปแบบหรือ 'รูปลักษณ์' ของข้อมูล (เช่นคุณอาจรวมชื่อและนามสกุลเข้าด้วยกัน)
ทำการคำนวณหรือค้นหาข้อมูลอื่น ๆ
ทำให้ข้อมูลผิดปกติ (ดึงข้อมูลจากหลายตารางไปยังจุดเดียว)
มุมมองที่ชั่วร้าย! หลีกเลี่ยงสิ่งเหล่านี้ถ้าเป็นไปได้และใช้เฉพาะเหตุผลที่ DVK กล่าวไว้นั่นคือการย้ายข้อมูลชั่วคราว
คุณควรเข้าใจว่าในฐานข้อมูลที่มีตาราง 100 ตารางนั้นยากที่จะจำจุดประสงค์ของทุกตาราง ตอนนี้ถ้าคุณเพิ่มที่นี่อีก 300 มุมมองมันจะกลายเป็นเรื่องยุ่งโดยสิ้นเชิง กว่าที่ "คนรักการดู" มักจะใช้มุมมองที่ซ้อนกันแล้วใช้มุมมองที่ซ้อนกันในกระบวนงานที่เก็บไว้ ตอนนี้ฉันทำงานกับฐานข้อมูลที่มีมุมมองซ้อนกันในเชิงลึก 4 เท่า! ดังนั้นเพื่อให้เข้าใจตรรกะที่ง่ายที่สุดของขั้นตอนการจัดเก็บฉันต้องผ่านมุมมองทั้งหมดก่อน