ทำไมคุณถึงสร้างมุมมองในฐานข้อมูล


267

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


ตรวจสอบคำตอบของฉันสำหรับคำถามที่คล้ายกันหวังว่าจะช่วยได้!
Loukan ElKadi

คำตอบ:


464

มุมมองให้ประโยชน์หลายประการ

1. มุมมองสามารถซ่อนความซับซ้อน

หากคุณมีแบบสอบถามที่ต้องเข้าร่วมหลายตารางหรือมีตรรกะหรือการคำนวณที่ซับซ้อนคุณสามารถเขียนรหัสตรรกะทั้งหมดลงในมุมมองจากนั้นเลือกจากมุมมองเช่นเดียวกับที่คุณทำกับตาราง

2. มุมมองสามารถใช้เป็นกลไกความปลอดภัยได้

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

3. มุมมองสามารถลดความซับซ้อนของการสนับสนุนรหัสดั้งเดิม

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

นี่เป็นเพียงตัวอย่างบางส่วนของการดูที่มีประโยชน์


84
รายการที่ 3 เป็นเหตุผลที่ยังไม่มีใครชี้ให้เห็น
MedicineMan

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

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

1
@ John หนี้ทางเทคนิคที่เกิดขึ้นนี้จะต้องชำระคืนไม่ช้าก็เร็วหรือไม่? ใน 10 ปีมันอาจไม่สำคัญสำหรับวิศวกรผู้เขียนเมื่อ 10 ปีก่อน แต่มันสำคัญสำหรับ บริษัท
super9

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

88

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


น่าสนใจ ความปลอดภัยเป็นคำตอบที่ดี คุณมี 'สิ่งอื่น ๆ ' อยู่ในใจ?
MedicineMan

13
ฉันคิดว่าคำตอบอื่นสำหรับคำถามนี้จะอธิบาย "สิ่งอื่น ๆ " :-)
Graeme Perrow

Select name, address, zipcode from customerจะไม่ตอบสนองวัตถุประสงค์แทนcreating a view?
PPB

@PranavBilurkar ใช่ถ้าคุณควบคุมการสืบค้นที่ผู้ใช้เรียกใช้อย่างสมบูรณ์ หากผู้ใช้มีความสามารถในการเรียกใช้แบบสอบถามของตนเอง (ผ่านบางโปรแกรม SQL แบบโต้ตอบหรือการเขียนสคริปต์ของตนเอง) พวกเขาสามารถเรียกใช้select * from customerซึ่งทำให้พวกเขาเข้าถึงทุกสิ่ง หากคุณให้สิทธิ์การเข้าถึงกับมุมมองไม่ใช่ตารางพวกเขาจะไม่สามารถเข้าถึงฟิลด์ที่ไม่ได้อยู่ในมุมมองได้
แกรมเพอร์โรว์

38

มุมมองคือการห่อหุ้มของแบบสอบถาม ข้อความค้นหาที่เปลี่ยนเป็นมุมมองมักจะมีความซับซ้อนและการบันทึกไว้เป็นมุมมองสำหรับการใช้ซ้ำนั้นมีประโยชน์


ดังนั้นคุณต้องการสร้างมุมมองเมื่อคุณมีแบบสอบถามที่ซับซ้อนหรือไม่ คิวรีมีความซับซ้อนเพียงใดเกณฑ์คืออะไร คุณได้อะไรจากการทำให้เป็นมุมมอง
แพทยศาสตร์

4
ความซับซ้อนเป็นตัวเลือกส่วนบุคคลจริงๆไม่มีเกณฑ์ที่กำหนดไว้ คุณมักจะใช้มุมมองหากคุณไม่ต้องการทำซ้ำตรรกะในหลายแอพพลิเคชั่นหรือจุดต่าง ๆ ในแอปพลิเคชันของคุณ ด้วยการทำให้เป็นมุมมองที่คุณซ่อนตรรกะนั้นและสามารถแบ่งปันได้อย่างง่ายดาย
Chris Cameron-Mills

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

2
@MedicineMan - โพรซีเดอร์ที่เก็บไว้ส่งคืนชุดผลลัพธ์ขณะที่มุมมองแสดงถึงตารางเสมือนจริงที่อนุญาตให้คุณใช้เป็นตารางในคิวรีอื่น
Andrew Hare

1
ฉันคิดว่าจุดนี้เกี่ยวกับชุดผลลัพธ์กับตารางเสมือนน่าจะเป็นจุดสำคัญที่ฉันไม่เข้าใจ
MedicineMan

28

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

แก้ไข

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

  1. ลดความซ้ำซ้อนในการเขียนแบบสอบถาม
  2. สร้างมาตรฐานสำหรับหน่วยงานที่เกี่ยวข้อง
  3. ให้โอกาสในการประเมินและเพิ่มประสิทธิภาพสำหรับการคำนวณและการรวมที่ซับซ้อน (เช่นการจัดทำดัชนีในมุมมอง Schemabound ใน MSSQL)
  4. ทำให้ข้อมูลเข้าถึงได้ง่ายขึ้นและใช้งานง่ายสำหรับสมาชิกในทีมและผู้ที่ไม่ใช่นักพัฒนา

1
คุณสามารถทำอย่างละเอียดเกี่ยวกับเรื่องนี้? คำตอบของคุณจะถูกโหวตให้ขึ้นค่อนข้างน้อย แต่ฉันไม่ได้รับค่าที่คนอื่น ๆ ดูเหมือนว่าจะ
MedicineMan

11

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

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

ดูเหมือนว่ารายงาน Crystal จะต้องการใช้มุมมองกับ procs ที่จัดเก็บดังนั้นผู้ที่ทำรายงานจำนวนมากมักจะใช้มุมมองเป็นจำนวนมาก

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


7

ข้อดีอย่างหนึ่งที่สำคัญของมุมมองในกระบวนงานที่เก็บไว้คือคุณสามารถใช้มุมมองเหมือนกับที่คุณใช้ตาราง กล่าวคือมุมมองสามารถอ้างถึงโดยตรงในFROMส่วนของแบบสอบถาม เช่นSELECT * FROM dbo.name_of_view.

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

หากคุณต้องการให้ความสามารถในการดูของจากภายในFROMประโยค แต่คุณต้องการที่จะผ่านในพารามิเตอร์ก็มีวิธีที่จะทำเช่นกัน มันเรียกว่าฟังก์ชั่นที่มีค่าเป็นตาราง

นี่เป็นบทความที่มีประโยชน์มากในหัวข้อ:

http://databases.aspfaq.com/database/should-i-use-a-view-a-stored-procedure-or-a-user-defined-function.html

แก้ไข:โดยวิธีการเรียงลำดับของคำถามนี้มุมมองที่มีประโยชน์มากกว่าฟังก์ชั่นที่มีมูลค่าตาราง? ฉันไม่มีคำตอบที่ดีจริงๆ แต่ฉันจะทราบว่าไวยากรณ์ T-SQL สำหรับการสร้างมุมมองนั้นง่ายกว่าฟังก์ชั่นที่ให้คุณค่ากับตารางและผู้ใช้ฐานข้อมูลของคุณอาจคุ้นเคยกับมุมมองมากขึ้น


+1 สำหรับการเป็นหนึ่งในไม่กี่คำตอบในการแก้ไขปัญหาของขั้นตอนการจัดเก็บกับคำสั่ง SELECT คุณมีสิทธิ์ที่จะยกประเด็นเรื่องฟังก์ชันตาราง โดยทั่วไปมุมมองมีแนวโน้มที่จะทำงานได้ดีกว่าฟังก์ชั่นเพราะพวกเขาแบ่งปันเครื่องมือเดียวกัน มีค่าโสหุ้ย (อย่างน้อยใน Oracle) ที่ต้องชำระเมื่อเปลี่ยนจาก SQL เป็น trabsactional SQL (เช่น PL / SQL) แต่สิ่งอื่น ๆ ทั้งหมด - ความปลอดภัยการห่อหุ้มและอื่น ๆ - นำไปใช้อย่างเท่าเทียมกันกับขั้นตอนหรือฟังก์ชั่นในการดู
APC

ขึ้นอยู่กับโครงสร้างของมุมมองบางมุมมองสามารถจัดทำดัชนี นั่นคือการปรับปรุงอย่างมากเหนือฟังก์ชั่นที่มีค่าของตาราง
HLGEM

6

มันสามารถทำหน้าที่เป็น "คนกลาง" ที่ดีระหว่าง ORM และตารางของคุณ

ตัวอย่าง:

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

อย่างไรก็ตามระบบส่วนใหญ่ที่เกี่ยวกับบุคคลยังคงใช้ SomeColumn เป็นสิ่งเดียวไม่ใช่หลายสิ่ง เราใช้มุมมองเพื่อรวบรวมบางคอลเลกชันทั้งหมดและวางไว้ในมุมมองซึ่งทำงานได้ดี

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


1
น่าสนใจ ในกรณีของคุณมันเกือบจะเหมือนกับอินเทอร์เฟซกับตาราง
MedicineMan

5

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

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

คุณยังสามารถสร้างฟังก์ชั่นที่ผู้ใช้กำหนดเองแบบอินไลน์ที่ดำเนินการทางตรรกะในมุมมองแบบกำหนดพารามิเตอร์หรือมุมมองที่มีพารามิเตอร์ในเงื่อนไขการค้นหา WHERE-clause สำหรับข้อมูลเพิ่มเติมดู Inline ฟังก์ชั่นที่ผู้ใช้กำหนด

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

การส่งออกและนำเข้า มุมมองข้อมูลสามารถใช้เพื่อส่งออกข้อมูลไปยังแอปพลิเคชันอื่น ตัวอย่างเช่นคุณอาจต้องการใช้ร้านค้าและตารางการขายในฐานข้อมูล pubs เพื่อวิเคราะห์ข้อมูลการขายโดยใช้Microsoft® Excel ในการทำเช่นนี้คุณสามารถสร้างมุมมองตามร้านค้าและตารางการขาย จากนั้นคุณสามารถใช้ยูทิลิตี bcp เพื่อส่งออกข้อมูลที่กำหนดโดยมุมมอง ข้อมูลยังสามารถนำเข้าสู่มุมมองบางอย่างจากไฟล์ข้อมูลโดยใช้ยูทิลิตี bcp หรือคำสั่ง BULK INSERT โดยระบุว่าสามารถแทรกแถวเข้าไปในมุมมองโดยใช้คำสั่ง INSERT สำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อ จำกัด ในการคัดลอกข้อมูลลงในมุมมองให้ดู INSERT สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ยูทิลิตี bcp และคำสั่ง BULK INSERT เพื่อคัดลอกข้อมูลไปยังและจากมุมมองให้ดูที่การคัดลอกไปยังหรือจากมุมมอง

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

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

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

มุมมองที่แบ่งพาร์ติชันสามารถอัปเดตได้หากตรงกับเงื่อนไขใด ๆ เหล่านี้: ทริกเกอร์ INSTEAD OF ถูกกำหนดไว้ในมุมมองพร้อมกับตรรกะเพื่อรองรับคำสั่ง INSERT, UPDATE และ DELETE

ทั้งมุมมองและคำสั่ง INSERT, UPDATE และ DELETE จะปฏิบัติตามกฎที่กำหนดไว้สำหรับมุมมองที่แบ่งพาร์ติชันได้ สำหรับข้อมูลเพิ่มเติมโปรดดูการสร้างมุมมองที่แบ่งพาร์ติชัน

https://technet.microsoft.com/en-us/library/aa214282(v=sql.80).aspx#sql:join


5

นี่คือเหตุผลทั่วไปสองประการ:

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

คุณสามารถใช้มันเพื่อความสะดวก เข้าร่วมบางตารางที่คุณใช้ร่วมกันตลอดเวลาในมุมมอง สิ่งนี้สามารถทำให้คิวรีสอดคล้องและง่ายขึ้น


3

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

อีกเหตุผลหนึ่งคือการ จำกัด ข้อมูลให้กับผู้ใช้ที่แตกต่างกัน ตัวอย่างเช่น:

ตารางที่ 1: Colums - USER_ID; USERNAME; SSN

ผู้ใช้ที่เป็นผู้ดูแลระบบสามารถมี privs บนตารางจริงได้ แต่ผู้ใช้ที่คุณไม่ต้องการเข้าถึงเพื่อพูด SSN คุณสร้างมุมมองเป็น

สร้างชื่อผู้ใช้ดูให้เลือก user_id ชื่อผู้ใช้จากตารางที่ 1;

จากนั้นให้สิทธิ์ในการเข้าถึงมุมมองไม่ใช่ตาราง


2

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


2

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


2

นี่คือวิธีการใช้มุมมองพร้อมกับการอนุญาตเพื่อ จำกัด คอลัมน์ที่ผู้ใช้สามารถอัปเดตในตาราง

/* This creates the view, limiting user to only 2 columns from MyTestTable */
CREATE VIEW dbo.myTESTview 
WITH SCHEMABINDING AS
SELECT ID, Quantity FROM dbo.MyTestTable;

/* This uses the view to execute an update on the table MyTestTable */
UPDATE dbo.myTESTview
SET Quantity = 7
WHERE ID = 1

1

เมื่อฉันต้องการที่จะเห็นภาพรวมของตารางและ / หรือมุมมอง (ในแบบอ่านอย่างเดียว)


1
'snapshot of a table' หมายถึงอะไร คุณต้องการทำเช่นนั้นเมื่อใดหรือทำไม
MedicineMan

มีหลายสถานการณ์ สมมติว่าคุณต้องการเรียกใช้แบบสอบถามที่ซับซ้อน / ร้านค้านำหน้าบนตารางโดยไม่มีผลกระทบและการขีดเส้นใต้ตาราง คุณสร้างมุมมอง (การนำเสนอแบบอ่านอย่างเดียว)
vehomzzz

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

1

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

ฉันใช้มุมมองที่เป็นรูปธรรมสำหรับคำสั่งเรียกใช้ที่ไม่จำเป็นต้องรักษาความถูกต้องตามเวลาจริง


เมื่อคุณใช้แบบสอบถามเป็นนอกคอก? ทำไม? ประเด็นนี้ไม่สมเหตุสมผลนัก
แพทยศาสตร์

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

1

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


1

นี้ไม่ได้ตอบคำถามของคุณว่า แต่ฉันคิดว่ามันจะมีมูลค่าการกล่าวขวัญมองเห็นวิวรูปธรรม ประสบการณ์ของฉันส่วนใหญ่อยู่กับOracleแต่ SQL-Server นั้นค่อนข้างคล้ายกัน

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


1

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


คุณสามารถยกตัวอย่างของบริการขนาดเล็กได้ไหม
MedicineMan

1

สิ่งหนึ่งที่อยากรู้เกี่ยวกับมุมมองคือ Microsoft Access มองเห็นเป็นตาราง: เมื่อคุณแนบ Microsoft Access ส่วนหน้ากับฐานข้อมูล SQL โดยใช้ ODBC คุณจะเห็นตารางและมุมมองในรายการของตารางที่มีอยู่ ดังนั้นหากคุณกำลังเตรียมรายงานที่ซับซ้อนใน MS Access คุณสามารถปล่อยให้เซิร์ฟเวอร์ SQL ทำการเข้าร่วมและทำการสืบค้นและทำให้ชีวิตของคุณง่ายขึ้นอย่างมาก เหมือนกันสำหรับการจัดทำแบบสอบถามใน MS Excel


1

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


ให้อภัยฉันถ้าสิ่งนี้อยู่นอกขอบเขตของคำถาม แต่มีหลายคนพูดถึงเรื่องนี้ - คุณไม่ต้องเสียค่าปรับในการทำงานหรือไม่?
แพทยศาสตร์

ไม่ใช่เลย. SQL Server เพิ่มประสิทธิภาพการแสดงแผนเดียวกันที่แน่นอนในการ * เลือกจากมุมมองที่มันไม่สำหรับ SQL ร่วมเทียบเท่ากับมุมมอง
ไบรอัน Spencer

1

ฉันกำลังสร้าง xxx ที่แมปความสัมพันธ์ทั้งหมดระหว่างตารางหลัก (เช่นตารางผลิตภัณฑ์) และตารางอ้างอิง (เช่น ProductType หรือ ProductDescriptionByLanguage) สิ่งนี้จะสร้างมุมมองที่จะช่วยให้ฉันเรียกคืนผลิตภัณฑ์และรายละเอียดทั้งหมดที่แปลจากปุ่มต่างประเทศเป็นคำอธิบาย จากนั้นฉันก็สามารถใช้ ORM เพื่อสร้างวัตถุเพื่อสร้างกริดกล่องคอมโบ ฯลฯ



0

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


ถ้าคุณ google คุณจะได้รับข้อมูลที่ชัดเจนมากสำหรับคำถามนี้
Chella

0

เราสร้างมุมมองเพื่อ จำกัด หรือ จำกัด การเข้าถึงแถว / คอลัมน์ทั้งหมดในตารางหากเจ้าของต้องการให้แชร์เฉพาะแถว / คอลัมน์ที่ จำกัด หรือ จำกัด เท่านั้นเขาจะสร้างมุมมองด้วยคอลัมน์เหล่านั้น


นี่เป็นเพียงเหตุผลเดียวว่าทำไมคุณควร / สามารถใช้มุมมอง
Alexander

0

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

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

สำหรับการสร้างโครงสร้างฐานข้อมูลที่สอดคล้องกัน: มุมมองนำเสนออิมเมจที่ไม่เปลี่ยนแปลงของโครงสร้างฐานข้อมูลที่สอดคล้องกันแม้ว่าตารางต้นฉบับจะมีการเปลี่ยนแปลง

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