Link Search Menu Expand Document (external link)

BE 1.6 Heirarkiska databaser
BE 1.7 Relationsdatabaser, SQL och ER-modellering

Table of contents


Hierarkisk databasmodell

Den hierarkiska databasmodellen är den äldsta typen av data modell. Den utvecklades av IBM 1968, och organiserar data i en trädliknande struktur. Den är uppbyggd enligt följande:

  • Noder som är sammankopplade med grenar
  • Den översta noden kallas “root node”
  • Om det finns flera noder på översta nivån kallas de “root segment”
  • Varje node har endast en förälder-node
  • En förälder-node kan ha flera barn-noder

hierarkis-databas-diagram


Relationsdatabasmodell

Relational Database Management System (RDBMS) utvecklades av E.F. Codd 1970. Det finns inga fysiska länkar som i hierarkiska databaser, istället är de strukturerade enligt följande:

  • Data presenteras i form av tabeller
  • Den handlar bara om data, inte fysisk struktur
  • Den innehåller information om metadata
  • Tabeller kan ha inbördes relationer till varandra
  • Data sparas som poster/items i rader i tabeller
  • Tabeller relaterar till varandra via kolumnvärden
  • Behandlar queries väldigt enkelt

relations-databas-diagram


SQL

Structured Query Language (SQL) är ett standard query-språk för att kommunicera med och manipulera databaser. Även om SQL är standardiserat enligt ANSI/ISO, så finns det ändå olika versioner av språket. Grunderna har de flesta dock gemensamt. 1

Med SQL kan vi till exempel skapa, hämta, uppdatera och radera data i relationsdatabaser, skapa nya databaser och tabeller samt sätta permissions/rättigheter.

Konventioner

  • Stora bokstäver i nyckelord (t.ex SELECT inte select)
  • Attribut och variabler med gemener
  • Lägg till plural S i tabellnamn (books inte book)
  • Skriv tabellnamn med snake_case
  • Dela upp långa statements i flera rader (max 80 tecken per rad)

Datatyper 2

Namn Exempel Beskrivning
INT id INT För heltal (-2 147 483 648 till 2 147 483 647)
VARCHAR firstname VARCHAR(255) För strängar upp till 255 tecken långa, men kan vara kortare
CHAR isbn CHAR(13) För strängar som är exakt 13 tecken långa
SMALLINT stock SMALLINT För mindre heltal (-32 768 till 32 767)
FLOAT price FLOAT För decimaltal (flyttal) med noggrannhet ner till 23 decimaler
ENUM() type ENUM(‘basic’, ‘premium’) För att använda ett av de fördefinierade alternativen

Restriktioner

Undviker att logiska fel uppstår i våra tabeller, och hjälper även till med relationer mellan tabeller.

Namn Exempel Beskrivning
NOT NULL id INT NOT NULL Värden i denna kolumn får inte innehålla NULL
UNSIGNED id INT UNSIGNED NOT NULL Värden för denna kolumn ska inte innehålla negativa tal, detta innebär att INT nu kan lagra dubbelt så stort tal (då vi bortser från den negativa delen)

Nycklar/keyes

Speciella restriktioner som hjälper till att mer finkornigt styra vad som får läggas till i tabeller, men även hur de relaterar till varandra. Det finns fyra olika nycklar i SQL.

Namn Exempel Beskrivning
PRIMARY_KEY id INT NOT NULL PRIMARY KEY Hanterar att vi endast får unik info från en tabell. Med en primary kay kan en rad inte innehålla samma värde och värdet kan inte vara null.
FOREIGN_KEY FOREIGN KEY (book_id) REFERENCES books(id), Värdet i denna kolumn är satt till foreign/extern nyckel, vilket innebär att värdet är en referens till en annan tabells primary key kolumn.
UNIQUE isbn CHAR(13) UNIQUE(isbn) Värdet för denna kolumn måste vara unikt i tabellen där kolumnen existerar.
INDEX ALTER TABLE books ADD INDEX(title); Skapar ett index för kolumnen i tabellen. Användbart för värden som vi vet kommer att hämtas ofta.

MySQL syntax

Skapa ny databas med MySQL

Skapa

CREATE DATABASE bookstore;

Välj vilken databas vi ska jobba i

USE bookstore;

Skapa tabellen books

CREATE TABLE books (
   title VARCHAR(255) NOT NULL, 
   author VARCHAR(255) NOT NULL,
   isbn CHAR(13) NOT NULL,
   stock SMALLINT UNSIGNED NOT NULL DEFAULT 0,
   price FLOAT UNSIGNED
);

Skapa tabellen customer

CREATE TABLE customers(
   id INT UNSIGNED NOT NULL,
   firstName VARCHAR(255) NOT NULL,
   surName VARCHAR(255) NOT NULL,
   email VARCHAR(255) NOT NULL,
   type ENUM('basic', 'premium')
);

Lägg till och ändra i befintlig tabell

Lägg till ny kolumn

ALTER TABLE books
  ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

Ändra i tabell

ALTER TABLE customers
  ADD UNIQUE KEY (email);

Lägg till data i tabell

INSERT INTO customers (firstName, surName, email, type)
  VALUES ("Vilgot", "Stenwall", "vilgot@datainternet.it", "premium");

(id är ju auto-increment så den ska inte skrivas in utan mySQL genererar automatiskt)

Läsa/hämta från tabell

Se hur tabellen ser ut

DESC books

genererar:

Field Type Null Key Default Extra
id int(10) unsigned NO PRI NULL auto_increment
title varchar(255) NO NULL    
author varchar(255) NO NULL    
isbn char(13) NO NULL    
stock smallint(5) unsigned NO 0    
price float unsigned YES NULL    

Hämta alla items i tabell

SELECT * FROM customers;

genererar:

id firstName surName email type
1 Vilgot Stenwall vilgot@datainternet.it premium

ER-modellering och samband

Schema för databaser och tabeller, det vill säga “mallen” för hur de ska se ut, skissas upp med så kallad ER-modellering. ER = Entity Relationship.

Symboler

  • Entitetstyper - själva tabellen, ritas med rektanglar, kan ha attribut entity-typer

  • Attribut - kolumnerna i tabellen, ritas med cirklar och pilar ut från entitetstypen attribut

  • Sambandstyper - referensattribut, besrkriver relationer mellan tabeller/entitetstyper, ritas som diamanter sambands-typer

Kardinalitetsförhållanden

Sambandstyper kan förtydligas och har tre typer av kardinalitetsförhållanden:

  • N:1/många-till-ett n-1 Räknas som samma typ som 1:N/en-till-många 1-n

  • 1:1/ett-till-ett 1-1

  • N:M/många-till-många n-m Med N:M skapas en mellantabell för att redogöra för relationen mellan entiteterna

Göra tabell av ett schema

Varje entitetstyp blir tabeller, och attribut blir kolumner.

Schema

er-schema

Tabell

number first_name last_name phone
11 Omar Faki 555-123 33 99
12 Hamadh Hashim 08-102 030 45
5554 Nivah Arakash 555-123 33 44
1241 Fake Sandakelium 555-123 99 99

N:1 och 1:1

Varje sambandstyp blir ett referensattribut. Kolumnen owner i tabellern car hänvisar till kolumnen number i tabellen person.

Schema

schema-1-n

Tabeller

person

number first_name last_name phone
11 Omar Faki 555-123 33 99
12 Hamadh Hashim 08-102 030 45
5554 Nivah Arakash 555-123 33 44
1241 Fake Sandakelium 555-123 99 99

car

number model owner
ABC123 Volvo V70 11
DEF456 Tesla Model Y 5554
GHI789 Kia Sportage 5554

N:M

Sambandstypen blir en mellantabell/pivot table.

Schema

schema-n-m

Tabeller

person

number first_name last_name phone
11 Omar Faki 555-123 33 99
12 Hamadh Hashim 08-102 030 45
5554 Nivah Arakash 555-123 33 44
1241 Fake Sandakelium 555-123 99 99

house

number color
1 green
2 red
3 blue
4 white

owns

person house
11 1
11 3
5554 4
1241 1

Referenser