Skapa SQL-vyer: Förklarad steg-för-steg

För att interagera med en relationsdatabas och skapa så kallade SQL-vyer, använder vi oss av SQL, eller Structured Query Language.

Men vad är då en SQL-vy? Det handlar om virtuella tabeller som samlar och lagrar information från de faktiska databastabellerna. Detta skapar en säker och förenklad tillgång till din data samtidigt som de underliggande tabellstrukturerna och implementeringarna döljs.

Hur fungerar det då? Som du redan vet används SQL-frågor för att skapa SQL-vyer. När en SQL-vy har skapats, sparas den underliggande SQL-frågan. När du använder en SQL-fråga för att hämta data från flera tabeller, exekveras frågan och hämtar information från motsvarande databastabeller. På samma sätt, när du frågar en skapad SQL-vy, hämtas och exekveras den lagrade frågan först.

Varför är det användbart att skapa SQL-vyer?

Eftersom SQL-vyer bygger på lagrade SQL-frågor bidrar de till att öka databassäkerheten. De förenklar också komplexa frågor och förbättrar frågeprestandan, bland andra fördelar. Låt oss undersöka hur skapandet av SQL-vyer kan vara fördelaktigt för din databas och dina applikationer:

#1. Ökad databassäkerhet

SQL-vyer fungerar som virtuella tabeller och döljer strukturerna i de faktiska databastabellerna. Genom att bara titta på en vy är det inte möjligt att avgöra hur många tabeller som finns och vilka olika kolumner de innehåller. Dessutom kan du lägga till åtkomstkontrollbegränsningar till din databas så att en användare endast kan fråga vyn och inte de faktiska tabellerna.

#2. Förenklade komplexa frågor

Dina SQL-frågor kan ofta sträcka sig över flera tabeller med komplicerade kopplingsvillkor. Om du frekvent använder sådana komplexa frågor kan du dra nytta av att skapa SQL-vyer. Du kan lagra din komplexa fråga i en SQL-vy. På så sätt kan du enkelt fråga vyn istället för att köra hela den komplexa frågan varje gång.

#3. Skydd mot schemaändringar

Om dina underliggande tabellstrukturer ändras, som att lägga till eller ta bort kolumner, förblir dina vyer opåverkade. Om du förlitar dig på dina SQL-vyer för alla dina frågor behöver du inte oroa dig för schemaändringar. Eftersom de är virtuella tabeller kommer din skapade SQL-vy att fortsätta fungera sömlöst.

#4. Förbättrad frågeprestanda

När du skapar SQL-vyer optimerar databasmotorn den underliggande frågan innan den lagras. En lagrad fråga körs vanligtvis snabbare än om du kör samma fråga direkt. Genom att använda SQL-vyer för att söka efter din data får du alltså bättre prestanda och snabbare resultat.

Hur skapar jag SQL-vyer?

För att skapa SQL-vyer använder du kommandot CREATE VIEW. En vy inkluderar en SELECT-sats som definierar den fråga som ska lagras i vyn. Syntaxen ser ut så här:

CREATE VIEW view_name AS 
SELECT 
  column_1, 
  column_2, 
  column_3...
FROM 
  table_name_1, table_name_2
WHERE 
  condition_clause

Låt oss illustrera detta med ett exempel. Anta att du har skapat två tabeller, ”avdelning” och ”anställd”. ”Avdelning”-tabellen innehåller avdelningens namn och dess ID. ”Anställd”-tabellen innehåller den anställdes namn och ID, tillsammans med ID för den avdelning som de tillhör. Vi ska använda dessa två tabeller för att skapa vår SQL-vy.

Skapa dina databastabeller

department_id department_name
1 Finance
2 Technology
3 Business

Tabell 1: avdelning

Om du använder MySQL kan du skapa den här tabellen med följande kommando:

CREATE TABLE `department` (
  `department_id` int,
  `department_name` varchar(255),
  PRIMARY KEY (`department_id`)
);

Infoga sedan data i den skapade tabellen med följande SQL:

INSERT INTO department VALUES (1, 'Finance');
INSERT INTO department VALUES (2, 'Technology');
INSERT INTO department VALUES (3, 'Business');
anställd_id employee_name department_id
100 John 3
101 Mary 1
102 Natalya 3
103 Bruce 2

Tabell 2: anställd

Med avdelningstabellen redo och fylld med data, skapa nu medarbetartabellen med hjälp av följande MySQL-kommando:

CREATE TABLE `employee` (
  `employee_id` INT, 
  `employee_name` VARCHAR(255), 
  `department_id` INT, 
  FOREIGN KEY (`department_id`) REFERENCES department(department_id)
);

Infoga sedan personalposterna i tabellen. Notera att eftersom kolumnen department_id har en främmande nyckelreferens med avdelningstabellen kan du inte infoga ett department_id som inte finns i den andra tabellen.

INSERT INTO employee VALUES (100, 'John', 3);
INSERT INTO employee VALUES (101, 'Mary', 1);
INSERT INTO employee VALUES (102, 'Natalya', 3);
INSERT INTO employee VALUES (103, 'Bruce', 2);

Fråga dina databastabeller

Låt oss nu använda tabellerna i en databasfråga. Tänk dig att du behöver hämta anställd_id, anställd_namn och avdelningsnamn för alla anställda. I det här fallet måste du använda båda tabellerna och koppla dem samman med den gemensamma kolumnen department_id. Din fråga ser då ut så här:

SELECT
  employee_id,
  employee_name,
  department_name
FROM 
  employee,
  department
WHERE 
  employee.department_id = department.department_id;

Skapa din SQL-vy

Det kan hända att du ofta söker efter eller refererar till den här datan. Dessutom kommer frågetiden att öka med tiden i takt med att fler poster tillkommer. I ett sådant scenario kan du skapa en SQL-vy som motsvarar denna fråga.

Använd följande kommando för att skapa en vy som heter anställd_info:

CREATE VIEW employee_info AS 
SELECT
  employee_id,
  employee_name, 
  department_name 
FROM 
  employee, 
  department 
WHERE 
  employee.department_id = department.department_id;

Med den här vyn skapad kan du direkt fråga den. Din fråga förenklas därmed till:

SELECT 
  * 
FROM 
  employee_info;

Att fråga SQL-vyn ger dig samma resultat som att köra din ursprungliga fråga. Men din fråga är nu enklare att underhålla. Vyn döljer komplexiteten i din fråga utan att kompromissa med vare sig resultat eller prestanda.

Hur ersätter jag SQL-vyer?

Om du har en vy med ett specifikt namn och du vill ändra eller ersätta den, använder du kommandot CREATE OR REPLACE VIEW. Med detta kommando kan du ändra SELECT-satsen som användes för att skapa vyn. Din vy kommer då att ersättas, men med samma namn. Dessutom skapas en ny SQL-vy om den inte redan finns.

Du kan ersätta SQL-vyer med följande syntax:

CREATE OR REPLACE VIEW view_name AS 
SELECT 
  new_column_1, 
  new_column_2, 
  new_column_3 ...
FROM 
  new_table_name_1, 
  new_table_name_2 ...
WHERE 
  new_condition_clause

Låt oss förtydliga med ett exempel. Vi utgår från tabellerna ”avdelning” och ”anställd”. En SQL-vy, anställd_info, skapas från dessa och inkluderar kolumnerna anställd_id, anställd_namn och avdelningsnamn.

Med tanke på säkerhetsproblem vill du kanske ta bort staff_id från den här vyn. Dessutom kanske du vill byta kolumnnamn för att dölja de faktiska databaskolumnerna. Du kan göra dessa ändringar i den befintliga vyn med följande SQL-kommando:

CREATE OR REPLACE VIEW employee_info AS
SELECT
  employee_name as name,
  department_name as department
FROM
  employee,
  department
WHERE
  employee.department_id = department.department_id;

När vyn har ersatts får du andra resultat när du använder samma fråga som tidigare. Till exempel ser du att en av kolumnerna har tagits bort. Dessutom har kolumnnamnen ändrats från anställd_namn och avdelningsnamn till namn respektive avdelning.

Utnyttja fördelarna med att skapa SQL-vyer

Genom att skapa SQL-vyer får du inte bara mer lättförståeliga frågor och snabbare datasökning, utan också ökad säkerhet och skydd mot schemaändringar. Att skapa SQL-vyer är ganska enkelt. Du kan ta vilken befintlig fråga som helst och omvandla den till en SQL-vy.

Använd steg-för-steg-guiden ovan för att skapa SQL-vyer och dra nytta av deras fördelar. Med SQL-vyer kan du göra dina databasapplikationer enkla och säkra samtidigt som du förbättrar deras prestanda.

Om du vill hantera din egen SQL-server, kan du utforska SQL Server Management Studio (SSMS).