Databasvyer

Databasdesign

Lis Sulmont

Curriculum Manager

Databasvyer

I en databas är en vy resultatet av en lagrad fråga mot data, som databasanvändare kan ställa frågor mot precis som mot ett vanligt databasobjekt (Wikipedia)

Virtuell tabell som inte ingår i det fysiska schemat

  • Det är frågan, inte datan, som lagras i minnet
  • Data aggregeras från tabeller
  • Kan användas som en vanlig databastabell
  • Slipper skriva om vanliga frågor eller ändra scheman
1 https://en.wikipedia.org/wiki/View_(SQL)
Databasdesign

Skapa en vy (syntax)

CREATE VIEW view_name AS
SELECT col1, col2 
FROM table_name 
WHERE condition;
Databasdesign

Skapa en vy (exempel)

Boddimensionen i snöflingaschemat

$$

Mål: Returnera titlar och författare inom genren science fiction

Databasdesign

Skapa en vy (exempel)

CREATE VIEW scifi_books AS
SELECT title,  author, genre
FROM dim_book_sf
JOIN dim_genre_sf ON dim_genre_sf.genre_id = dim_book_sf.genre_id
JOIN dim_author_sf ON dim_author_sf.author_id = dim_book_sf.author_id
WHERE dim_genre_sf.genre = 'science fiction';
Databasdesign

Fråga mot en vy (exempel)

SELECT * FROM scifi_books
| title                         | author            | genre           |
|-------------------------------|-------------------|-----------------|
| The Naked Sun                 | Isaac Asimov      | science fiction |
| The Robots of Dawn            | Isaac Asimov      | science fiction |
| The Time Machine              | H.G. Wells        | science fiction |
| The Invisible Man             | H.G. Wells        | science fiction |
| The War of the Worlds         | H.G. Wells        | science fiction |
| Wild Seed (Patternmaster, #1) | Octavia E. Butler | science fiction |
| ...                           | ...               | ...             |
Databasdesign

Bakom kulisserna

SELECT * FROM scifi_books

=

SELECT * FROM 
(SELECT title,  author, genre
FROM dim_book_sf
JOIN dim_genre_sf ON dim_genre_sf.genre_id = dim_book_sf.genre_id
JOIN dim_author_sf ON dim_author_sf.author_id = dim_book_sf.author_id
WHERE dim_genre_sf.genre = 'science fiction');
Databasdesign

Visa vyer

(i PostgreSQL)

$$

SELECT * FROM INFORMATION_SCHEMA.views;

Inkluderar systemvyer

SELECT * FROM information_schema.views
WHERE table_schema NOT IN ('pg_catalog', 'information_schema');

Exkluderar systemvyer

Databasdesign

Fördelar med vyer

  • Tar inte upp lagringsutrymme
  • En form av åtkomstkontroll
    • Döljer känsliga kolumner och begränsar vad användaren ser
  • Döljer frågekomplexitet
    • Användbart för starkt normaliserade scheman
Databasdesign

$$ Schema för Pitchfork Reviews-databasen

1 https://www.kaggle.com/nolanbconaway/pitchfork-data
Databasdesign

Nu kör vi en övning!

Databasdesign

Preparing Video For Download...