คำถามติดแท็ก view

ตารางเสมือนที่แสดงข้อมูลในหนึ่งตารางขึ้นไปด้วยวิธีอื่น

3
จะใช้มุมมองใน MySQL เมื่อใด
เมื่อสร้างตารางจากหลายการรวมเพื่อใช้ในการวิเคราะห์เมื่อใดที่จะใช้มุมมองกับการสร้างตารางใหม่ เหตุผลหนึ่งที่ฉันต้องการใช้มุมมองก็คือสคีมาฐานข้อมูลได้รับการพัฒนาโดยผู้ดูแลระบบของเราจากภายใน Ruby และฉันไม่คุ้นเคยกับ Ruby ฉันสามารถขอให้สร้างตาราง แต่ต้องการขั้นตอนเพิ่มเติมและฉันต้องการความยืดหยุ่นมากขึ้นเมื่อทำการพัฒนา / ทดสอบการรวมใหม่ ฉันเริ่มใช้มุมมองตามคำตอบของคำถามที่เกี่ยวข้องใน SO ( เมื่อใดที่จะใช้ R, เมื่อใดควรใช้ SQL ) คำตอบที่ได้รับการโหวตสูงสุดจะเริ่มต้น "ทำการเปลี่ยนแปลงข้อมูลใน SQL จนกว่าข้อมูลจะอยู่ในตารางเดียวแล้วทำส่วนที่เหลือใน R" ฉันเริ่มใช้มุมมอง แต่ฉันมีปัญหาเล็กน้อยเกี่ยวกับมุมมอง: ข้อความค้นหาช้าลงมาก มุมมองไม่ได้รับการเททิ้งจากการผลิตไปยังฐานข้อมูลสำรองที่ฉันใช้สำหรับการวิเคราะห์ มุมมองที่เหมาะสมสำหรับการใช้งานนี้? ถ้าเป็นเช่นนั้นฉันควรคาดหวังว่าจะได้รับการลงโทษหรือไม่ มีวิธีเพิ่มความเร็วคิวรีในการดูหรือไม่?

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

4
มุมมองเป็นอันตรายต่อประสิทธิภาพใน PostgreSQL หรือไม่
ต่อไปนี้เป็นข้อความที่ตัดตอนมาจากหนังสือเกี่ยวกับการออกแบบ db (การออกแบบฐานข้อมูลเริ่มต้น ISBN: 0-7645-7490-6): อันตรายจากการใช้มุมมองคือการกรองคิวรีกับมุมมองโดยคาดว่าจะอ่านส่วนเล็ก ๆ ของตารางที่มีขนาดใหญ่มาก การกรองใด ๆ ที่ควรทำในมุมมองเพราะการกรองใด ๆ กับตัวเองถูกนำไปใช้หลังจากแบบสอบถามในมุมมองได้ดำเนินการเสร็จสมบูรณ์ โดยทั่วไปมุมมองมีประโยชน์สำหรับการเร่งกระบวนการพัฒนา แต่ในระยะยาวสามารถฆ่าประสิทธิภาพของฐานข้อมูลได้อย่างสมบูรณ์ ต่อไปนี้เป็นข้อความที่ตัดตอนมาจากเอกสารประกอบ PostgreSQL 9.5: การใช้มุมมองแบบเสรีเป็นสิ่งสำคัญในการออกแบบฐานข้อมูล SQL ที่ดี มุมมองช่วยให้คุณสามารถแค็ปซูลรายละเอียดของโครงสร้างของตารางของคุณซึ่งอาจเปลี่ยนแปลงได้เมื่อแอปพลิเคชันของคุณพัฒนาขึ้นหลังอินเทอร์เฟซที่สอดคล้องกัน แหล่งที่มาทั้งสองดูเหมือนจะขัดแย้งกัน ("ไม่ออกแบบด้วยมุมมอง" กับ "ทำออกแบบด้วยมุมมอง") อย่างไรก็ตามในมุมมอง PG จะดำเนินการโดยใช้ระบบกฎ ดังนั้นอาจเป็นไปได้ (และนี่คือคำถามของฉัน) การกรองใด ๆ กับมุมมองจะถูกเขียนใหม่เป็นตัวกรองภายในมุมมองทำให้เกิดการเรียกใช้แบบสอบถามแบบครั้งเดียวเทียบกับตารางต้นแบบ การตีความของฉันถูกต้องหรือไม่และ PG ได้รวมเอาส่วนคำสั่งเข้าและออกจากที่ไหน? หรือมันแยกกันทีละอัน? ตัวอย่างสั้น ๆ ที่มีอยู่ในตัวถูกต้อง (คอมไพล์ได้)?

5
ซ้อนกันดูการออกแบบฐานข้อมูลที่ดี?
ฉันได้อ่านนานมาแล้ว หนังสือระบุว่าเราไม่ควรอนุญาตให้มีมุมมองแบบซ้อนใน SQL Server ฉันไม่แน่ใจว่าทำไมเราไม่สามารถทำเช่นนั้นหรือฉันอาจจำคำสั่งที่ไม่ถูกต้อง นักเรียน SELECT studentID, first_name, last_name, SchoolID, ... FROM students CREATE VIEW vw_eligible_student AS SELECT * FROM students WHERE enroll_this_year = 1 ครู SELECT TeacherID, first_name, last_name, SchoolID, ... FROM teachers CREATE VIEW vw_eligible_teacher AS SELECT * FROM teachers WHERE HasCert = 1 AND enroll_this_year = …

5
วิธีแสดงรายการมุมมองทั้งหมดใน SQL ใน PostgreSQL
ฉันจะแสดงรายการมุมมองทั้งหมดสำหรับฐานข้อมูลโดยใช้คำสั่ง SQL ใน PostgreSQL ได้อย่างไร ฉันต้องการบางสิ่งที่คล้ายกับเอาต์พุตของ\dvคำสั่งpsql แต่ควรเป็นเพียงแค่รายการของชื่อมุมมอง เช่น, SELECT ...; my_view_1 my_view_2 my_view_3 ฉันใช้ PostgreSQL v9.1.4 บน Ubuntu Linux

3
Views จะปรับให้เหมาะสมเมื่อฉันเพิ่มส่วนคำสั่ง WHERE กับพวกเขาหรือไม่
มันสร้างความแตกต่างหรือไม่ถ้าคุณกรองมุมมองภายในหรือภายนอกมุมมอง ตัวอย่างเช่นมีข้อแตกต่างระหว่างสองข้อความค้นหานี้หรือไม่ SELECT Id FROM MyTable WHERE SomeColumn = 1 หรือ SELECT Id FROM MyView WHERE SomeColumn = 1 และMyViewถูกกำหนดให้เป็น SELECT Id, SomeColumn FROM MyTable และเป็นคำตอบที่แตกต่างกันหรือไม่หากตารางต้นฉบับตั้งอยู่บนเซิร์ฟเวอร์ที่เชื่อมโยง ฉันถามเพราะฉันต้องค้นหาตารางขนาดใหญ่ (44mil แถว) สองครั้งจากเซิร์ฟเวอร์ที่เชื่อมโยงและรับผลรวม ฉันต้องการทราบว่าฉันควรสร้างสองมุมมองเพื่อเข้าถึงข้อมูลหรือไม่สำหรับแต่ละแบบสอบถามหรือถ้าฉันสามารถออกไปได้ด้วยมุมมองเดียวและWHEREประโยค

4
แก้ไข DEFINER ในหลาย ๆ มุมมอง
ฉันมีปัญหาในการสำรองฐานข้อมูลของฉันหลังจากการอัพเดต ฉันแหย่ระบบของฉันพยายามหาสาเหตุ ฉันค้นหาหนึ่งรายการส่งคืนผลลัพธ์นี้ Got error: 1449: The user specified as a definer ('cittool'@'%') does not exist when using LOCK TABLES หลังจากการตรวจสอบบางอย่างปรากฏว่าตัวระบุสำหรับมุมมองเหล่านี้เป็นบัญชีนักพัฒนาซอฟต์แวร์เก่าที่ถูกลบออกจากระบบ ฐานข้อมูลและมุมมองที่มีปัญหานี้มีการใช้งานไม่บ่อยนักและส่วนใหญ่ถูกเก็บไว้เพื่อการเก็บถาวร มีประมาณ 40 มุมมองที่มีตัวกำหนดที่ไม่มีอยู่อีกต่อไป มีวิธีง่ายๆในการเปลี่ยนผู้กำหนดเป็นบัญชีที่แตกต่างกันในทุกสิ่งในครั้งเดียวหรือไม่? มีวิธีรับ mysqldump เพียงแค่ถ่ายโอนมุมมองทั้งหมดออกไปยังไฟล์ดังนั้นฉันสามารถแก้ไขไฟล์นั้นและสร้างมุมมองใหม่ได้หรือไม่
25 mysql  view 

1
แผนการดำเนินการแสดงการดำเนินการ CONVERT_IMPLICIT ราคาแพง ฉันสามารถแก้ไขสิ่งนี้ด้วยการจัดทำดัชนีหรือฉันจำเป็นต้องเปลี่ยนตารางหรือไม่?
ฉันมีมุมมองที่สำคัญและช้ามาก ๆ ซึ่งรวมถึงเงื่อนไขที่น่าเกลียดบางอย่างเช่นนี้ในส่วนที่ ฉันยังทราบด้วยว่าการรวมนั้นเป็นการรวมแบบรวมและแบบช้าในvarchar(13)แทนที่จะเป็นฟิลด์จำนวนเต็ม แต่ต้องการปรับปรุงการค้นหาแบบง่ายด้านล่างที่ใช้มุมมองนี้: CREATE VIEW [dbo].[vwReallySlowView] AS AS SELECT I.booking_no_v32 AS bkno, I.trans_type_v41 AS trantype, B.Assigned_to_v61 AS Assignbk, B.order_date AS dateo, B.HourBooked AS HBooked, B.MinBooked AS MBooked, B.SecBooked AS SBooked, I.prep_on AS Pon, I.From_locn AS Flocn, I.Trans_to_locn AS TTlocn, (CASE I.prep_on WHEN 'Y' THEN I.PDate ELSE I.FirstDate END) …
24 sql-server  view 

3
แทนที่มุมมองที่ปรากฏใน Postgres
ฉันมีมุมมองที่เป็นรูปธรรมPostgres 9.3ซึ่งฉันต้องการอัปเดตด้วยคอลัมน์ใหม่ อย่างไรก็ตามมุมมองที่ปรากฏอื่น ๆ ยังขึ้นอยู่กับมุมมองนี้และข้อความแสดงข้อผิดพลาดระบุว่าไม่สามารถวางมุมมองได้เมื่อวัตถุอื่นขึ้นอยู่กับมุมมองนี้ ข้อผิดพลาด: ไม่สามารถวางมุมมอง materialized ล่าสุด latest_charges ได้เนื่องจากวัตถุอื่นขึ้นอยู่กับมัน นอกจากนี้ยังปรากฏจากเอกสารที่ว่าคำหลัก REPLACE ไม่ถูกต้องสำหรับมุมมองที่ปรากฏ มีทางลัดนอกเหนือจากการปล่อยวัตถุที่ต้องพึ่งพาทั้งหมดแล้วสร้างใหม่แต่ละรายการหรือไม่

4
การพิจารณาว่าเกิดการเปลี่ยนแปลงสกีมาอย่างไร
สิ่งเลวร้ายเกิดขึ้นเมื่อวานนี้ มุมมองที่สร้างขึ้นเมื่อไม่นานมานี้มีการแก้ไขโดยคนที่ทำลายรายงานในที่สุด น่าเสียดาย. บางคน (รู้ทั้งรู้หรือไม่รู้) ทำการปรับเปลี่ยนนี้ในฐานข้อมูล PRODUCTION คำถามของฉัน: มีวิธี (สคริปต์ / ซอฟต์แวร์ / ฟรีแวร์ ฯลฯ ) หรือไม่ซึ่งเราสามารถรู้ได้ว่าใคร (ชื่อผู้ใช้) ทำการเปลี่ยนแปลงนี้เพื่อให้ฉันสามารถยกเลิกการเข้าถึงฐานข้อมูลการผลิตสำหรับผู้ใช้นั้น หากคำถามของฉันไม่ชัดเจนโปรดแสดงความคิดเห็น
21 sql-server  view 


1
SQL Server - การจัดการการแปลสตริงในที่ซ้อนกันแบบ non-deterministic
ในขณะทำโปรไฟล์ฐานข้อมูลฉันพบว่ามีการอ้างอิงฟังก์ชั่นที่ไม่ได้กำหนดค่าบางอย่างที่เข้าถึง1,000-2500 ครั้งต่อนาทีสำหรับการเชื่อมต่อแต่ละครั้งในแอพพลิเคชั่นนี้ วิSELECTจากมุมมองทำให้แผนการดำเนินการต่อไปนี้: ดูเหมือนว่าแผนซับซ้อนสำหรับมุมมองที่มีน้อยกว่าหนึ่งพันแถวที่อาจเห็นการเปลี่ยนแปลงหนึ่งหรือสองแถวทุกสองสามเดือน แต่มันก็แย่ลงด้วยการปฏิบัติอื่น ๆ ดังต่อไปนี้: มุมมองแบบซ้อนไม่สามารถกำหนดค่าได้ดังนั้นเราจึงไม่สามารถจัดทำดัชนีได้ แต่ละมุมมองอ้างอิงหลายUDFs เพื่อสร้างสตริง UDF แต่ละอันประกอบด้วยUDFs ที่ซ้อนกันเพื่อรับรหัส ISO สำหรับภาษาที่แปลเป็นภาษาท้องถิ่น ผู้ชมในกองกำลังใช้เพิ่มเติมสร้างสตริงกลับมาจากUDFการเป็นJOINภาค มุมมองสแต็กแต่ละครั้งจะถือว่าเป็นตารางหมายความว่ามีINSERT/ UPDATE/ DELETEทริกเกอร์ในแต่ละเพื่อเขียนไปยังตารางพื้นฐาน ทริกเกอร์เหล่านี้ในมุมมองใช้CURSORSว่าEXECวิธีการจัดเก็บที่อ้างอิงมากกว่านี้สตริงสร้างUDFs ดูเหมือนว่าฉันจะเน่าเสีย แต่ฉันมีประสบการณ์กับ TSQL เพียงไม่กี่ปี มันจะดีขึ้นเช่นกัน! ดูเหมือนนักพัฒนาที่ตัดสินใจว่านี่เป็นความคิดที่ยอดเยี่ยมทำทั้งหมดนี้เพื่อให้สตริงสองสามร้อยรายการที่เก็บไว้สามารถมีการแปลตามสตริงที่ส่งคืนจากสตริงUDFนั้นเป็นแบบเฉพาะสคีมา นี่คือหนึ่งในมุมมองในสแต็ก แต่ทั้งหมดนั้นไม่ดีเท่ากัน: CREATE VIEW [UserWKStringI18N] AS SELECT b.WKType, b.WKIndex , CASE WHEN ISNULL(il.I18NID, N'') = N'' THEN id.I18NString ELSE il.I18nString END AS WKString ,CASE …

1
PostgreSQL ตรวจสอบสิทธิ์ของวัตถุในลำดับใด
รับบทบาทฐานข้อมูล, user1ฟังก์ชั่นที่something()กำหนดไว้เป็นขั้นตอนการจัดเก็บและมุมมองที่สร้างขึ้นเช่น: CREATE VIEW view1 AS select * from something() และได้รับการอนุญาตนี้: REVOKE ALL ON FUNCTION something FROM user1 REVOKE SELECT ON view1 FROM user1 เมื่อฉันเรียกฉันได้รับข้อผิดพลาดSELECT * FROM view1permission denied for function something() คำถามของฉันคือถ้าฉันเพิกถอนการอนุญาตที่เลือกไว้ในมุมมองเหตุใดจึงเรียกใช้ฟังก์ชันนี้ ฉันคาดหวังว่าจะได้รับสิ่งที่ชอบ: permission denied for relation view1 ขอขอบคุณ!

2
เหตุใดคอลัมน์ที่คำนวณเป็นค่า NULL จึงไม่สามารถเรียกดูได้ในมุมมอง
ฉันมีโต๊ะ: CREATE TABLE [dbo].[Realty]( [Id] [int] IDENTITY(1,1) NOT NULL, [RankingBonus] [int] NOT NULL, [Ranking] AS ([Id]+[RankingBonus]) PERSISTED NOT NULL .... ) และมุมมอง: CREATE View [dbo].[FilteredRealty] AS SELECT realty.Id as realtyId, ... COALESCE(realty.Wgs84X, ruian_cobce.Wgs84X, ruian_obec.Wgs84X) as Wgs84X, COALESCE(realty.Wgs84Y, ruian_cobce.Wgs84Y, ruian_obec.Wgs84Y) as Wgs84Y, realty.Ranking, ... FROM realty JOIN Category ON realty.CategoryId = …

2
ทำธุรกรรม SQL โดยใช้ WITH ใน CREATE VIEW
ฉันต้องการสร้างการดูด้วยการใช้คำสั่ง แต่ไม่พบการอ้างอิงเกี่ยวกับไวยากรณ์ที่ถูกต้องจริงๆ ฉันอยากได้แบบนี้ WITH TempTbl AS (SELECT ...) CREATE VIEW SomeView SELECT * FROM TempTbl และไวยากรณ์ที่ถูกต้องสำหรับการใช้หลายกับคำสั่งคืออะไร? ไม่มีประโยชน์ใน MSDN :(
14 t-sql  view 

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