Använd vänsterpil och högerpil för att navigera

Eller Ctrl+P för att skriva ut till PDF (eller på papper)

Förhållande mellan tabeller

Komposita datatyper i SQL

Hittills

Nycklar (keys)

Vad vi vill åstadkomma

Vad vi skulle göra i C#

  1. class Album {
  2. public string Name;
  3. public DateTime Date;
  4. public Song[] Songs;
  5. }
  6. class Song {
  7. public string Name;
  8. public int Length;
  9. }

Vad vi kan försöka i SQL

Album
NameDateSongName1SongLength1SongName2SongLength2SongName3SongLength3...
Exodus1977-06-03Natural Mystic105So Much Things To Say129Guiltiness112...
Survival1979-10-02So Much Trouble in the World147Zimbabwe110.........
...........................

Problem

Lösning

Två tabeller

Album
NameDate
Exodus1977-06-03
Survival1979-10-02
......
Song
NameLength
Natural Mystic105
So Much Things To Say129
Guiltiness112
So Much Trouble in the World147
Zimbabwe110
......

Förhållande

One-to-many-förhållande med namn

Album
NameDate
Exodus1977-06-03
Survival1979-10-02
......
Song
NameLengthAlbumName
Natural Mystic105Exodus
So Much Things To Say129Exodus
Guiltiness112Exodus
So Much Trouble in the World147Survival
Zimbabwe110Survival
.........

Problem med namn

One-to-many-förhållande med ID

Album
IDNameDate
1Exodus1977-06-03
2Survival1979-10-02
.........
Song
IDNameLengthAlbumID
1Natural Mystic1051
2So Much Things To Say1291
3Guiltiness1121
4So Much Trouble in the World1472
5Zimbabwe1102
............

Utökning: samma låt på olika album

Vad vi skulle göra i C#

  1. class Album {
  2. public string Name;
  3. public DateTime Date;
  4. public Song[] Songs;
  5. }
  6. class Song {
  7. public string Name;
  8. public int Length;
  9. public Album[] Albums;
  10. }

Problem med many-to-many

Kärt barn har många namn

Join-tabell

Many-to-many-förhållande

Album
IDNameDate
1Exodus1977-06-03
2Survival1979-10-02
3Greatest Hits2010-01-02
.........
AlbumSong
AlbumIDSongID
11
12
13
24
25
31
34
35
......
Song
IDNameLength
1Natural Mystic105
2So Much Things To Say129
3Guiltiness112
4So Much Trouble in the World147
5Zimbabwe110
.........

Extra värden på join-tabellen

Exempel på extra värden i join-tabellen

Movie
IDNameDate
1Fellowship of the Ring2012-12-19
2District 92009-08-14
3Thor: Ragnarok2017-11-03
.........
MoviePerson
MovieIDPersonIDRole
11Director
21Producer
12Actor
32Actor
23Director
.........
Person
IDNameGender
1Peter JacksonMale
2Cate BlanchettFemale
3Neill BlomkampMale
.........

Alternativt perspektiv

Förhållanden istället för null

Exempel på null istället för förhållande

Person
IDNameTitle
1Ian McKellenSir
2Brad PittNULL
3Judi DenchDame

Exempel på förhållande istället för null

Person
IDName
1Ian McKellen
2Brad Pitt
3Judi Dench
Title
PersonIDTitle
1Sir
3Dame

Sammanfattning