Forstå SQL-visninger: En dyptgående veiledning
Vi benytter SQL, eller Structured Query Language, som kommunikasjonsmiddel med relasjonsdatabaser, og for å konstruere SQL-visninger.
Hva er egentlig SQL-visninger? De representerer virtuelle tabeller, som kombinerer og lagrer data fra de reelle databasetabellene som du definerer. Dette gir deg en sikker og lettvint måte å få tilgang til dine datasett, samtidig som du skjuler de underliggende tabellstrukturene og deres implementeringer.
Hvordan fungerer dette i praksis? Som du vet, brukes SQL-spørringer for å generere SQL-visninger. Når en SQL-visning er etablert, lagres den tilhørende SQL-spørringen. Hvis du bruker en SQL-spørring for å hente data fra flere tabeller, vil spørringen utføres og hente de nødvendige dataene fra de respektive databasetabellene. På lignende måte, når du spør etter en ferdig SQL-visning, hentes først den lagrede spørringen og deretter utføres den.
Hvorfor er det nyttig å opprette SQL-visninger?
Fordi SQL-visninger er drevet av lagrede SQL-spørringer, bidrar de til å øke databasens sikkerhet. De forenkler også komplekse søk og forbedrer søkeytelsen, i tillegg til andre fordeler. La oss se nærmere på hvordan oppretting av SQL-visninger kan gagne databasen og applikasjonene dine:
#1. Forbedrer databasesikkerheten
SQL-visninger fungerer som virtuelle tabeller og skjuler de underliggende strukturene til de faktiske databasetabellene. Bare ved å se på en visning, er det ikke umiddelbart åpenbart hvor mange tabeller det er, eller hvilke kolonner de inneholder. I tillegg kan du konfigurere tilgangskontroll for databasen, slik at en bruker kun kan spørre mot visningen og ikke de faktiske tabellene.
#2. Forenkler innviklede spørringer
Ofte kan dine SQL-spørringer strekke seg over flere tabeller, med komplekse koblingsbetingelser. Hvis du ofte bruker slike komplekse søk, kan du dra nytte av å opprette SQL-visninger. Du kan lagre den komplekse spørringen i en SQL-visning, og dermed spørre direkte mot visningen i stedet for å måtte kjøre hele den komplekse spørringen hver gang.
#3. Reduserer effekten av endringer i databaseskjemaet
Dersom de underliggende tabellstrukturene endres, for eksempel ved at kolonner legges til eller fjernes, vil dine visninger forbli uendret. Hvis du baserer alle dine søk på SQL-visninger, trenger du ikke å bekymre deg for skjemaendringer. Den opprettede SQL-visningen vil, som en virtuell tabell, fortsette å fungere uten problemer.
#4. Forbedrer ytelsen til spørringer
Når du oppretter SQL-visninger, optimaliserer databasemotoren den underliggende spørringen før den lagres. En lagret spørring vil vanligvis kjøre raskere enn om den samme spørringen skulle utføres direkte. Dermed får du forbedret ytelse og raskere resultater ved å benytte SQL-visninger for å spørre etter data.
Hvordan lager man SQL-visninger?
Du kan bruke CREATE VIEW-kommandoen for å lage SQL-visninger. En visning inneholder en SELECT-setning som definerer spørringen som lagres i visningen. Syntaksen er som følger:
CREATE VIEW view_name AS SELECT column_1, column_2, column_3... FROM table_name_1, table_name_2 WHERE condition_clause
La oss illustrere dette med et eksempel. Tenk deg at du har to tabeller, «avdeling» og «ansatt». «Avdeling»-tabellen inneholder avdelingens navn og ID. «Ansatt»-tabellen inneholder navn og ID til den ansatte, samt IDen til avdelingen vedkommende tilhører. Vi vil bruke disse to tabellene til å lage en SQL-visning.
Opprett databasetabellene
department_id | department_name |
1 | Finance |
2 | Teknologi |
3 | Business |
Tabell 1: avdeling
Dersom du benytter MySQL, kan du opprette denne tabellen med følgende spørring:
CREATE TABLE `department` ( `department_id` int, `department_name` varchar(255), PRIMARY KEY (`department_id`) );
Sett inn data i tabellen ved å bruke følgende SQL-kommandoer:
INSERT INTO department VALUES (1, 'Finance'); INSERT INTO department VALUES (2, 'Technology'); INSERT INTO department VALUES (3, 'Business');
ansatt_id | employee_name | department_id |
100 | John | 3 |
101 | Mary | 1 |
102 | Natalya | 3 |
103 | Bruce | 2 |
Tabell 2: ansatt
Når avdelingstabellen er opprettet og fylt med data, kan du lage «ansatt»-tabellen ved hjelp av følgende MySQL-spørring:
CREATE TABLE `employee` ( `employee_id` INT, `employee_name` VARCHAR(255), `department_id` INT, FOREIGN KEY (`department_id`) REFERENCES department(department_id) );
Deretter setter du inn data i ansatttabellen. Husk at ettersom kolonnen «department_id» har en fremmednøkkelreferanse til «avdeling»-tabellen, kan du ikke sette inn en «department_id» som ikke finnes i «avdeling»-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', 1);
Spør i databasetabellene dine
La oss bruke tabellene i en databasespørring. Tenk deg at du ønsker å hente «ansatt_id», «ansatt_navn» og «avdelingsnavn» for alle ansatte. I dette tilfellet må du benytte begge tabellene og koble dem sammen ved hjelp av den felles kolonnen «department_id». Din spørring blir dermed:
SELECT employee_id, employee_name, department_name FROM employee, department WHERE employee.department_id = department.department_id;
Opprett din SQL-visning
Det kan være at du ofte henter denne informasjonen. I tillegg, over tid, med flere oppføringer i tabellene, vil søketiden begynne å øke. I et slikt tilfelle kan du opprette en SQL-visning som tilsvarer denne spørringen.
Bruk følgende spørring for å opprette en visning kalt «ansattinfo»:
CREATE VIEW employee_info AS SELECT employee_id, employee_name, department_name FROM employee, department WHERE employee.department_id = department.department_id;
Med denne visningen på plass kan du spørre direkte mot den. Din spørring blir dermed forenklet til:
SELECT * FROM employee_info;
Spørring mot SQL-visningen gir deg samme resultat som å kjøre den opprinnelige spørringen, men søket ditt er nå enklere å vedlikeholde. Visningen skjuler kompleksiteten i søket ditt, uten at det går på bekostning av resultat eller ytelse.
Hvordan erstatter man SQL-visninger?
Hvis du har en visning med et spesifikt navn og ønsker å endre eller erstatte den, kan du bruke CREATE OR REPLACE VIEW-kommandoen. Ved å bruke denne kommandoen kan du endre SELECT-setningen som ble brukt til å opprette visningen. Dette vil endre visningens output, mens navnet på visningen forblir det samme. I tillegg oppretter du en ny SQL-visning hvis den ikke eksisterer fra før.
Du kan erstatte SQL-visninger med følgende syntaks:
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
La oss se på et eksempel. Vi har «avdeling»- og «ansatt»-tabellene, og «ansatt_info»-visningen er opprettet fra dem. Denne inneholder «ansatt_id», «ansatt_navn» og «avdelingsnavn».
Med tanke på sikkerhet, vil du kanskje fjerne «ansatt_id» fra visningen. I tillegg ønsker du å endre kolonnenavnene for å skjule de faktiske databasekolonnene. Du kan gjøre disse endringene i den eksisterende visningen ved hjelp av følgende SQL-spørring:
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 visningen er erstattet, vil du se andre resultater når du bruker det samme søket som før. I søkeresultatet vil du se at en av kolonnene er fjernet, og at kolonnenavnene er endret fra «ansattnavn» og «avdelingsnavn» til henholdsvis «name» og «department».
Utnytt fordelene med SQL-visninger
Ved å opprette SQL-visninger får du ikke bare enklere spørringer og raskere datahenting, men også forbedret sikkerhet og beskyttelse mot endringer i databaseskjemaet. Det er enkelt å lage SQL-visninger, og du kan transformere alle eksisterende spørringer til SQL-visninger.
Følg veiledningen over for å opprette SQL-visninger og dra nytte av fordelene de gir. Med SQL-visninger kan du gjøre databaseapplikasjonene dine enklere og sikrere, samtidig som du øker ytelsen.
Hvis du ønsker å administrere din egen SQL-server, kan du vurdere SQL Server Management Studio (SSMS).