Lär dig SQL

Back to All Courses

Lesson 2

Vad är en databas?

by Ted Klein Bergman

Vad är en databas?

En databas är i grund bara en organiserad samling av data (data = information). Det används för att så effektivt som möjligt spara, bevara och hämta data. Exempelvis använder företag som Facebook och Google databaser för att hantera information om deras användare och för att snabbt kunna hämta information om exempelvis sökningar på hemsidor. Vår databas kommer vara en så kallad relationsdatabas som i grund består utav tabeller (tables).

Tabeller är en tvådimensionell datastruktur som ni säkert stött på i grundskolan och i program som Excel. Den består av rader och kolumner, men i databastermer kallas dessa för tuples och attribut. Nedanför har vi skapat en tabell som beskriver användare i vårt sociala nätverk. Varje tuple (rad) representerar en användare, medan varje attribut (kolumn) representerar något värde associerat med användarna.

user_idusernameemailage
0transportwildcatolivia91@hotmail.com26
1wraptealfahid.lotif@hotmail.com
2listenseagullserene13_fcb@hotmail.com14

För att beskriva tabellen ovanför kommer vi använda oss av notationen users(user_id, username, email, age). Det förklarar för oss att vi har en tabell vid namn users där varje tuple har attributen user_id, username, email och age. I tabellen ovan är user_id även en s.k. primary key, noterat av att den är i fetstil (vanligtvis brukar man notera primary key genom att stryka under attributet, men vi kommer använda fetstil p.g.a. tekniska orsaker).

Primary key

Primary key är ett attribut som används för att identifiera unika tuples i en tabell. Detta är nödvändigt om vi vill kunna referera till någon specifik tuple. Exempelvis går det inte att anmäla trollet som ... . Vi måste ha något mer specifikt attribut får att hänvisa till användaren.

Ofta brukar man ha något slags ID-nummer, men det kan egentligen vara vad som helst. Kraven som en primary key måste upprätthålla är att det måste vara unikt och vara ett värde som alltid existerar. Det får alltså inte lämnas blankt, såsom det har gjorts i en cell för attributet age ovanför. Avsaknaden av ett värde kallas NULL.

Något annat som inte är ett krav men som är en bra standard att följa är att primary keys bör vara något som aldrig kommer ändras. Exempelvis skulle email kunna vara en primary key (om vi antar att alla användare måste ange en unik email när de registrerar sig på sidan) men om vi vill att användare ska kunna byta sin email är det bättre att använda sig av ett ID-nummer. Samma princip gäller username.

Composite key (Sammanvävda nycklar)

En primary key behöver däremot inte vara ett enskilt attribut. Säg att vi har en tabell med lectures(time, place, subject, teacher) som håller koll på var, när, i vilket ämne och vem föreläsaren är, för alla föreläsningar på KTH. Inget av attributen är unika för en föreläsning. Flera olika föreläsningar kan hållas under en viss tid; en sal kan användas för flera olika föreläsningar; en lärare kan hålla flera olika föreläsningar, och så vidare. Vad är då tabellens primary key i detta fall?

Om du har tolkat rätt så är kombinationen av time och place våran primary key. Detta under förutsättningen att det inte går att ha flera föreläsningar i samma sal under samma tid. När flera attribut utgör en primary key kallar vi detta composite keys.

Exercise

products(product_id, name, price, stock) är en tabell för produkter i ett lager. Vad vet vi om tabellen?

Solution

  1. Att tabellens namn är products.

  2. Att alla tuples i tabellen har fyra attribut: product_id, name, price, stock.

  3. Att tabellens primary key är attributet product_id.

Exercise

Nedanför har vi en tabell vid namn student_products.

product_idnamepricestock
1455Exam hug bear99122
3510Coffee-free caffeine drink20245
9871Free time13 9990
  1. Vad bör vara tabellens primary key?

  2. Hur många tuples finns i tabellen?

  3. Hur många attribut finns i tabellen?

  4. Vad är notationen för denna tabell?

Solution

  1. product_id.

  2. 3 tuples.

  3. 4 attribut.

  4. student_products(product_id, name, price, stock).

Exercise

students(first_name, last_name, program) är en tabell som håller reda på vilka studenter som går ett visst program. Den som valde att göra denna tabell gjorde förnamnet och efternamnet till en composite key. Vad kan detta ha för nackdelar?

Solution

Detta betyder att det inte kan finnas två studenter med samma för- och efternamn i denna tabell, då composite key måste vara unikt så vi kan referera till enskilda studenter. Den tillåter dock studenter med samma förnamn eller med samma efternamn, men inte studenter med samma förnamn och efternamn. Alltså skulle denna design vara väldigt dålig om man implementerade den i verkligheten.