Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Vyer | Några Ytterligare Ämnen
Avancerade Tekniker i SQL

bookVyer

I föregående kapitel nämnde vi ett objekt som kallas vy när vi diskuterade användarbehörigheter. Nu ska vi titta närmare på detta objekt.

En vy i SQL är en virtuell tabell som baseras på resultatet av en SQL-fråga. Den innehåller rader och kolumner precis som en riktig tabell, och fälten i en vy kommer från en eller flera verkliga tabeller i databasen.
Vy används av flera skäl, bland annat för att förenkla komplexa frågor, förbättra säkerheten genom att begränsa åtkomst till specifik data, samt för att presentera data i ett specifikt format.

Viktiga egenskaper hos vyer

  • Virtuell tabell: En vy lagrar inte data fysiskt. Den hämtar sin data från de tabeller som den baseras på (kallas bas-tabeller);
  • Förenkla komplexa frågor: Vyer kan förenkla komplexa SQL-frågor genom att kapsla in dem i en enda vy. Detta gör det enklare att arbeta med komplexa joins och aggregeringar;
  • Säkerhet: Vyer kan begränsa åtkomst till specifika rader eller kolumner av data, vilket förbättrar säkerheten. Användare kan ges åtkomst till vyn utan att få åtkomst till de underliggande bas-tabellerna;
  • Konsistens: Vyer kan presentera ett konsekvent, oförändrat gränssnitt även när den underliggande databasschemat ändras.

Implementering

Vi kommer att skapa en vy som heter account_activity_view baserad på våra tabeller BankAccounts och UserLogs som visar kontonummer, kontoinnehavarens namn, saldo och den senaste åtgärden som utförts på kontot.

1234567891011121314151617181920212223242526
-- Create a view that shows account details along with their latest action CREATE OR REPLACE VIEW account_activity_view AS SELECT ba.account_number, -- Select the account number from the bankaccounts table ba.account_holder, -- Select the account holder's name from the bankaccounts table ba.balance, -- Select the balance from the bankaccounts table ul.action AS latest_action, -- Select the latest action from the userlogs table (alias as latest_action) ul.timestamp AS latest_action_time -- Select the timestamp of the latest action (alias as latest_action_time) FROM BankAccounts ba -- Main table: bankaccounts LEFT JOIN ( -- Subquery to get the most recent action for each account SELECT DISTINCT ON (account_number) account_number, -- Select the account number action, -- Select the action timestamp -- Select the timestamp FROM UserLogs ORDER BY account_number, -- Order by account number timestamp DESC -- Order by timestamp in descending order to get the latest action ) ul ON ba.account_number = ul.account_number; -- Join the subquery result with bankaccounts on account number -- Get data from the view SELECT * FROM account_activity_view;
copy

Nu kan du använda denna vy i andra frågor utan att behöva återskapa den komplexa frågan med joins, genom att helt enkelt använda den skapade vyn som en vanlig tabell.

Observera

Även om vi kan använda vyn som en vanlig tabell, är det inte faktiskt en fysisk tabell! Datan i vyn lagras inte på disken. Istället körs dess fråga varje gång vi använder vyn, och det resulterande datat används i huvudfrågan.

question mark

Vilket av följande påståenden beskriver bäst säkerhetsaspekten av vyer?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 7

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 4.35

bookVyer

Svep för att visa menyn

I föregående kapitel nämnde vi ett objekt som kallas vy när vi diskuterade användarbehörigheter. Nu ska vi titta närmare på detta objekt.

En vy i SQL är en virtuell tabell som baseras på resultatet av en SQL-fråga. Den innehåller rader och kolumner precis som en riktig tabell, och fälten i en vy kommer från en eller flera verkliga tabeller i databasen.
Vy används av flera skäl, bland annat för att förenkla komplexa frågor, förbättra säkerheten genom att begränsa åtkomst till specifik data, samt för att presentera data i ett specifikt format.

Viktiga egenskaper hos vyer

  • Virtuell tabell: En vy lagrar inte data fysiskt. Den hämtar sin data från de tabeller som den baseras på (kallas bas-tabeller);
  • Förenkla komplexa frågor: Vyer kan förenkla komplexa SQL-frågor genom att kapsla in dem i en enda vy. Detta gör det enklare att arbeta med komplexa joins och aggregeringar;
  • Säkerhet: Vyer kan begränsa åtkomst till specifika rader eller kolumner av data, vilket förbättrar säkerheten. Användare kan ges åtkomst till vyn utan att få åtkomst till de underliggande bas-tabellerna;
  • Konsistens: Vyer kan presentera ett konsekvent, oförändrat gränssnitt även när den underliggande databasschemat ändras.

Implementering

Vi kommer att skapa en vy som heter account_activity_view baserad på våra tabeller BankAccounts och UserLogs som visar kontonummer, kontoinnehavarens namn, saldo och den senaste åtgärden som utförts på kontot.

1234567891011121314151617181920212223242526
-- Create a view that shows account details along with their latest action CREATE OR REPLACE VIEW account_activity_view AS SELECT ba.account_number, -- Select the account number from the bankaccounts table ba.account_holder, -- Select the account holder's name from the bankaccounts table ba.balance, -- Select the balance from the bankaccounts table ul.action AS latest_action, -- Select the latest action from the userlogs table (alias as latest_action) ul.timestamp AS latest_action_time -- Select the timestamp of the latest action (alias as latest_action_time) FROM BankAccounts ba -- Main table: bankaccounts LEFT JOIN ( -- Subquery to get the most recent action for each account SELECT DISTINCT ON (account_number) account_number, -- Select the account number action, -- Select the action timestamp -- Select the timestamp FROM UserLogs ORDER BY account_number, -- Order by account number timestamp DESC -- Order by timestamp in descending order to get the latest action ) ul ON ba.account_number = ul.account_number; -- Join the subquery result with bankaccounts on account number -- Get data from the view SELECT * FROM account_activity_view;
copy

Nu kan du använda denna vy i andra frågor utan att behöva återskapa den komplexa frågan med joins, genom att helt enkelt använda den skapade vyn som en vanlig tabell.

Observera

Även om vi kan använda vyn som en vanlig tabell, är det inte faktiskt en fysisk tabell! Datan i vyn lagras inte på disken. Istället körs dess fråga varje gång vi använder vyn, och det resulterande datat används i huvudfrågan.

question mark

Vilket av följande påståenden beskriver bäst säkerhetsaspekten av vyer?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 7
some-alt