เมื่อใดควรใช้ View แทน Table?


108

เมื่อใดควรใช้ View บนตารางจริง สิ่งนี้ควรคาดหวังว่าจะได้รับอะไรบ้าง?

โดยรวมแล้วข้อดีของการใช้มุมมองบนตารางคืออะไร? ฉันไม่ควรออกแบบโต๊ะในแบบที่มุมมองตั้งแต่แรกหรือไม่?

คำตอบ:


80

มีความแตกต่างมากมายที่คุณจะต้องพิจารณา

มุมมองสำหรับการเลือก:

  1. มุมมองให้สิ่งที่เป็นนามธรรมเหนือตาราง คุณสามารถเพิ่ม / ลบเขตข้อมูลได้อย่างง่ายดายในมุมมองโดยไม่ต้องแก้ไขสคีมาพื้นฐานของคุณ
  2. มุมมองสามารถจำลองการรวมที่ซับซ้อนได้อย่างง่ายดาย
  3. มุมมองสามารถซ่อนข้อมูลเฉพาะฐานข้อมูลจากคุณได้ เช่นหากคุณจำเป็นต้องทำการตรวจสอบโดยใช้ฟังก์ชัน Oracles SYS_CONTEXT หรือสิ่งอื่น ๆ อีกมากมาย
  4. คุณสามารถจัดการ GRANTS ของคุณได้โดยตรงบนมุมมองแทนที่จะเป็นตารางจริง จัดการได้ง่ายขึ้นหากคุณรู้ว่าผู้ใช้บางรายสามารถเข้าถึงข้อมูลพร็อพเพอร์ตี้ได้เท่านั้น
  5. มุมมองสามารถช่วยคุณในเรื่องความเข้ากันได้แบบย้อนกลับ คุณสามารถเปลี่ยนสคีมาพื้นฐานได้ แต่ข้อมูลพร็อพเพอร์ตี้สามารถซ่อนข้อมูลเหล่านั้นจากไคลเอนต์บางรายได้

มุมมองสำหรับการแทรก / อัปเดต:

  1. คุณสามารถจัดการปัญหาด้านความปลอดภัยด้วยมุมมองได้โดยใช้ฟังก์ชันดังกล่าวเป็นประโยค "WITH CHECK OPTION" ของ Oracle โดยตรงในมุมมอง

ข้อเสีย

  1. คุณสูญเสียข้อมูลเกี่ยวกับความสัมพันธ์ (คีย์หลักคีย์ต่างประเทศ)
  2. ไม่ชัดเจนว่าคุณจะสามารถแทรก / อัปเดตมุมมองได้หรือไม่เนื่องจากมุมมองนั้นซ่อนการรวมที่อยู่ภายใต้จากคุณ

3
คำถามด่วน: การดูเป็นแบบ "ถาวร" หรือมีอายุการใช้งานเท่านั้น? เหตุผลที่ฉันถาม: เรามีระบบที่บางครั้งก็ล่มระหว่างการรันโค้ดที่ยาวนาน ฉันบรรเทาสิ่งนี้โดยการกัดส่วนของโค้ดลงในตารางกลางซึ่งบันทึกผลลัพธ์ระดับกลาง ดังนั้นหากระบบทำงานก่อนที่โค้ดจะเสร็จสมบูรณ์ฉันจะต้องเริ่มจากตารางชั่วคราวที่บันทึกไว้ล่าสุดเท่านั้น ฉันอาจเปลี่ยนไปใช้มุมมองหากพวกเขาเสนอความคงทนเท่าเดิม มิฉะนั้นฉันจะทำแบบเดิมต่อไปและลดอุณหภูมิลงเมื่อสิ้นสุดการวิ่ง ขอบคุณ!
ouonomos

8
@ouonomos: มุมมองปกติไม่มีข้อมูลใด ๆ มันเป็นเพียงคำสั่ง SQL ที่เก็บไว้นั่นคือมุมมองเกี่ยวกับข้อมูลพื้นฐาน ฐานข้อมูลบางส่วน (เช่น Oracle, PostgreSQL) รองรับมุมมองที่เป็นรูปธรรมซึ่งเก็บ "มุมมอง" ไว้ชั่วคราวในตารางอื่นเพื่อให้เข้าถึงได้เร็วขึ้น สิ่งนี้ทำเพื่อเร่งการเข้าถึงการอ่านเมื่อมุมมองมีความซับซ้อน แต่นั่นไม่ได้ช่วยคุณในกรณีของคุณเนื่องจากมุมมองที่เป็นรูปธรรมยังคงเป็นข้อมูลพร็อพเพอร์ตี้ไม่ใช่ข้อมูลในตัวมันเอง แนวทางของคุณน่าจะใช้ได้
Lukas Eder

44

มุมมองสามารถ:

  • ลดความซับซ้อนของโครงสร้างตารางที่ซับซ้อน
  • ลดความซับซ้อนของรูปแบบการรักษาความปลอดภัยของคุณโดยอนุญาตให้คุณกรองข้อมูลที่ละเอียดอ่อนและกำหนดสิทธิ์ได้ง่ายขึ้น
  • อนุญาตให้คุณเปลี่ยนตรรกะและพฤติกรรมโดยไม่ต้องเปลี่ยนโครงสร้างผลลัพธ์ (เอาต์พุตยังคงเหมือนเดิม แต่ SELECT ที่อยู่ข้างใต้อาจเปลี่ยนแปลงอย่างมีนัยสำคัญ)
  • เพิ่มประสิทธิภาพ (Sql Server Indexed Views)
  • นำเสนอการเพิ่มประสิทธิภาพการค้นหาที่เฉพาะเจาะจงด้วยมุมมองที่อาจยากต่อการรวบรวมเป็นอย่างอื่น

และคุณไม่ควรออกแบบตารางเพื่อให้ตรงกับมุมมอง แบบจำลองพื้นฐานของคุณควรเกี่ยวข้องกับการจัดเก็บและการดึงข้อมูลที่มีประสิทธิภาพ มุมมองเป็นเครื่องมือส่วนหนึ่งที่ช่วยลดความซับซ้อนที่เกิดขึ้นจากแบบจำลองที่มีประสิทธิภาพและเป็นมาตรฐานโดยช่วยให้คุณสามารถสรุปความซับซ้อนนั้นได้

นอกจากนี้การถามว่า "ข้อดีของการใช้มุมมองบนโต๊ะคืออะไร" ไม่ใช่การเปรียบเทียบที่ดี คุณไม่สามารถไปได้หากไม่มีโต๊ะ แต่คุณสามารถทำได้โดยไม่มีมุมมอง พวกเขาแต่ละคนมีเหตุผลที่แตกต่างกันมาก ตารางเป็นแบบจำลองที่เป็นรูปธรรมและมุมมองเป็นนามธรรมที่ดีมุมมอง


1
+1 Views เป็นส่วนหนึ่งของเครื่องมือที่ช่วยลดความซับซ้อนที่เกิดขึ้นจากแบบจำลองที่มีประสิทธิภาพและเป็นมาตรฐานโดยช่วยให้คุณสามารถสรุปความซับซ้อนนั้นได้
metdos

34

มุมมองเป็นสิ่งที่ยอมรับได้เมื่อคุณต้องการให้แน่ใจว่ามีการปฏิบัติตามตรรกะที่ซับซ้อนทุกครั้ง ตัวอย่างเช่นเรามีมุมมองที่สร้างข้อมูลดิบที่จำเป็นสำหรับการรายงานทางการเงินทั้งหมด การให้รายงานทั้งหมดใช้มุมมองนี้ทำให้ทุกคนทำงานจากชุดข้อมูลเดียวกันแทนที่จะใช้รายงานหนึ่งชุดโดยใช้การรวมชุดเดียวและอีกรายงานหนึ่งลืมใช้อันที่ให้ผลลัพธ์ที่แตกต่างกัน

การดูเป็นสิ่งที่ยอมรับได้เมื่อคุณต้องการ จำกัด ผู้ใช้เฉพาะบางส่วนของข้อมูล ตัวอย่างเช่นหากคุณไม่ลบระเบียน แต่ทำเครื่องหมายเฉพาะระเบียนปัจจุบันว่าใช้งานอยู่และเวอร์ชันเก่ากว่าเป็นไม่ใช้งานคุณต้องการให้มุมมองใช้เพื่อเลือกเฉพาะระเบียนที่ใช้งานอยู่ วิธีนี้จะป้องกันไม่ให้คนลืมใส่ where clause ในแบบสอบถามและได้ผลลัพธ์ที่ไม่ดี

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

มุมมองมีประโยชน์มากเมื่อปรับฐานข้อมูลใหม่

มุมมองไม่สามารถยอมรับได้เมื่อคุณใช้มุมมองเพื่อเรียกดูซึ่งอาจส่งผลให้ประสิทธิภาพแย่ลง (อย่างน้อยใน SQL Server) เราเกือบจะสูญเสียลูกค้ามูลค่าหลายล้านดอลลาร์เพราะมีคนเลือกที่จะทำให้ฐานข้อมูลเป็นนามธรรมด้วยวิธีนี้และประสิทธิภาพก็น่ากลัวและหมดเวลาบ่อย เราต้องจ่ายค่าแก้ไขด้วยไม่ใช่ลูกค้าเนื่องจากปัญหาด้านประสิทธิภาพเป็นความผิดของเราโดยสิ้นเชิง เมื่อมีการเรียกดูมุมมองพวกเขาจะต้องสร้างมุมมองพื้นฐานทั้งหมด ฉันได้เห็นสิ่งนี้ที่มุมมองนี้เรียกว่ามุมมองซึ่งเรียกว่าการดูและมีการสร้างบันทึกมากมายหลายล้านรายการเพื่อที่จะเห็นทั้งสามอย่างที่ผู้ใช้ต้องการในที่สุด ฉันจำได้ว่าหนึ่งในมุมมองเหล่านี้ใช้เวลา 8 นาทีในการนับจำนวนอย่างง่าย (*) ของบันทึก การโทรเข้าชมเป็นความคิดที่แย่มาก

มุมมองมักเป็นความคิดที่ไม่ดีที่จะใช้เพื่ออัปเดตเรกคอร์ดเนื่องจากโดยปกติคุณสามารถอัปเดตฟิลด์จากตารางเดียวกันเท่านั้น (อีกครั้งนี่คือ SQL Server ฐานข้อมูลอื่นอาจแตกต่างกันไป) หากเป็นเช่นนั้นคุณควรอัปเดตตารางโดยตรงเพื่อให้คุณทราบว่ามีช่องใดบ้าง


1
ไม่ทราบว่ามีปัญหาด้านประสิทธิภาพในการดูการโทร นั่นดูแปลก ๆ เครื่องมือเพิ่มประสิทธิภาพการสืบค้นไม่ได้รับการจัดการอย่างถูกต้องใช่หรือไม่ คุณใช้ SQL Server เวอร์ชันใดในกรณีของคุณ
Patrick Honorez

7

มุมมองมีประโยชน์เมื่อคุณต้องการเลือกจากหลาย ๆ ตารางหรือเพียงเพื่อรับส่วนย่อยของตาราง

คุณควรออกแบบตารางของคุณในลักษณะที่ฐานข้อมูลของคุณเป็นปกติดี (การทำสำเนาขั้นต่ำ) ซึ่งอาจทำให้การสืบค้นค่อนข้างยาก

มุมมองเป็นการแยกส่วนเล็กน้อยทำให้คุณสามารถดูข้อมูลในตารางได้แตกต่างจากที่จัดเก็บไว้


7

แนวทางปฏิบัติทั่วไปคือซ่อนการรวมในมุมมองเพื่อนำเสนอโมเดลข้อมูลที่ผิดปกติให้กับผู้ใช้มากขึ้น การใช้งานอื่น ๆ เกี่ยวข้องกับการรักษาความปลอดภัย (เช่นโดยการซ่อนคอลัมน์และ / หรือแถวบางคอลัมน์) หรือประสิทธิภาพ (ในกรณีของมุมมองที่เป็นรูปธรรม)


6

คุณควรออกแบบโต๊ะของคุณโดยไม่คำนึงถึงมุมมอง
นอกเหนือจากการบันทึกการรวมและเงื่อนไข Views ยังมีข้อได้เปรียบด้านประสิทธิภาพ: SQL Server อาจคำนวณและบันทึกแผนการดำเนินการในมุมมองดังนั้นจึงทำให้เร็วกว่าคำสั่ง SQL แบบ "ทันที"
ดูยังอาจทำให้งานของคุณง่ายขึ้นเกี่ยวกับการเข้าถึงของผู้ใช้ในระดับฟิลด์


5

ประการแรกตามชื่อที่แสดงให้เห็นว่ามุมมองไม่เปลี่ยนรูป นั่นเป็นเพราะมุมมองไม่ใช่อะไรอื่นนอกจากตารางเสมือนที่สร้างจากคิวรีที่เก็บไว้ในฐานข้อมูล ด้วยเหตุนี้คุณจึงมีลักษณะบางอย่างของมุมมอง:

  • คุณสามารถแสดงข้อมูลได้เพียงบางส่วนเท่านั้น
  • คุณสามารถเข้าร่วมหลายตารางในมุมมองเดียว
  • คุณสามารถรวบรวมข้อมูลในมุมมอง (เลือกจำนวน)
  • ดูไม่เก็บข้อมูลจริงพวกเขาไม่ต้องการพื้นที่ตารางใด ๆ เนื่องจากเป็นการรวมเสมือนของตารางพื้นฐาน

ดังนั้นจึงมีกรณีการใช้งานกว่าล้านเท่าที่มุมมองจะเหมาะสมกว่าตารางลองนึกถึงการแสดงเฉพาะผู้ใช้ที่ใช้งานอยู่บนเว็บไซต์เท่านั้น ข้อมูลพร็อพเพอร์ตี้จะดีกว่าเนื่องจากคุณดำเนินการเฉพาะกับข้อมูลส่วนย่อยที่อยู่ในฐานข้อมูลของคุณเท่านั้น (ผู้ใช้ที่ใช้งานอยู่และไม่ได้ใช้งาน)

ตรวจสอบบทความนี้

หวังว่านี่จะช่วยได้ ..


2

ตามที่วิกิพีเดีย ,

มุมมองสามารถให้ข้อได้เปรียบมากมายเหนือตาราง:

  • มุมมองสามารถแสดงถึงส่วนย่อยของข้อมูลที่มีอยู่ในตาราง
  • มุมมองสามารถ จำกัด ระดับการเปิดรับแสงของตารางที่อยู่ข้างนอกกับโลกภายนอก: ผู้ใช้ที่ระบุอาจมีสิทธิ์ในการสอบถามมุมมองในขณะที่ปฏิเสธการเข้าถึงส่วนที่เหลือของตารางฐาน

  • มุมมองสามารถรวมและลดความซับซ้อนของตารางหลายตารางลงในตารางเสมือนเดียว

  • มุมมองสามารถทำหน้าที่เป็นตารางรวมโดยที่เอ็นจินฐานข้อมูลจะรวบรวมข้อมูล (ผลรวมค่าเฉลี่ย ฯลฯ ) และแสดงผลลัพธ์ที่คำนวณเป็นส่วนหนึ่งของข้อมูล

  • มุมมองสามารถซ่อนความซับซ้อนของข้อมูลได้ ตัวอย่างเช่นมุมมองอาจปรากฏเป็น Sales2000 หรือ Sales2001 โดยแบ่งพาร์ติชันตารางพื้นฐานจริงอย่างโปร่งใส

  • ชมใช้พื้นที่น้อยมากในการจัดเก็บ ; ฐานข้อมูลมีเพียงนิยามของมุมมองไม่ใช่สำเนาของข้อมูลทั้งหมดที่นำเสนอ

  • มุมมองสามารถให้ความปลอดภัยเป็นพิเศษขึ้นอยู่กับเอ็นจิ้น SQL ที่ใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.