Vinnaren i pepparkakshustävlingen!
2008-04-01, 23:38
  #1
Medlem
Jag håller på och sätter upp ett system med länder, stater och städer. Principen är då att varje stad hör hemma till en stat som hör hemma till ett land.
Först tänkte jag då att varje stat har land_id och varje stad har stat_id. Sedan kom jag på situationen då man vill ha alla städer från ett visst land.
Hur löser man en sådan situation?

Ska jag sätta land_id även i städernas tabell eller finns det något smart sätt att hämta alla städer ur ett visst land med en enda query utan att behöva ha land_id även i stad-tabellen?
Citera
2008-04-01, 23:44
  #2
Medlem
select * from stad
join stat on stat.id = stad.stat_id
join land on land.id = stat.land_id
where land.id = visst_lands_id
Citera
2008-04-01, 23:46
  #3
Medlem
CodeMANs avatar
Citat:
Ursprungligen postat av johanfannsredan
Ska jag sätta land_id även i städernas tabell eller finns det något smart sätt att hämta alla städer ur ett visst land med en enda query utan att behöva ha land_id även i stad-tabellen?
Helt korrekt.

Varje stad tillhör ett land, genom att skapa ett land_id-kolumn i stad-tabellen så kan du:
1. Ta reda på vilket land en stad tillhör.
2. Ta reda på alla städer i ett land.
Citera
2008-04-01, 23:53
  #4
Medlem
Nu har jag fått två olika svar här.

Alternativ 1 verkar vara mer felsäkert. Det kan aldrig bli ett land_id som inte stämmer överens med ett stat_id t.ex. En stad kan inte hamna i ett land och samtidigt i en stat från ett helt annat land.
Joins är ju dock långsammare.

Alternativ 2 är snabbare då men det kan ju också bli fel om det skulle råka bli ett stat_id som inte stämmer överens med ett land_id.

Alternativ 1 känns överlag bättre, men fortsätt komma med förslag.
Citera
2008-04-02, 00:02
  #5
Medlem
CodeMANs avatar
Citat:
Ursprungligen postat av johanfannsredan
Nu har jag fått två olika svar här.

Alternativ 1 verkar vara mer felsäkert. Det kan aldrig bli ett land_id som inte stämmer överens med ett stat_id t.ex. En stad kan inte hamna i ett land och samtidigt i en stat från ett helt annat land.
Joins är ju dock långsammare.

Alternativ 2 är snabbare då men det kan ju också bli fel om det skulle råka bli ett stat_id som inte stämmer överens med ett land_id.

Alternativ 1 känns överlag bättre, men fortsätt komma med förslag.
Sorry som fan, jag missade att du även hade stater.

1. Stat-tabellen ska ha land_id.
2. Stad-tabellen ska ha både land_id och stat_id.

På så sätt kan du kolla:
1. Vilka städer tillhör ett land, eller en stat, utan joins.
2. Vilka städer som finns i ett land, eller en stat, utan joins.


Nu hoppas jag verkligen att jag inte hittar på, ligger i sängen och skriver detta utan att ha någon SQL Editor framme.
Citera
2008-04-02, 00:18
  #6
Medlem
Det blir ju dock överdrivet komplicerat om man fortsätter. Denna sidan ska bli någon sorts sida med alla liveshower av en artist (har dock inte pratat klart med han som ska ha den men ungefär). Om man då fortsätter så att varje stad ska ha flera arenor, varje arena ska ha flera konserter osv. Då blir det ju 4 extrafält i show-tabellen.
Hur mycket långsammare är joins? Det blir lättare när man ska uppdatera också. Räcker med en tabell istället för 4.
Citera
2008-04-02, 06:12
  #7
Moderator
Protons avatar
Det är ju inte så att dina JOINAR kommer göra att du får vänta en halvtimme på svar direkt. Skulle jag designa databasen hade jag haft så få attribut i min primärnyckel som möjligt.

Den eventuella "overhead" dina joinar kan ge dej är ingenting i jämförelse med den dagen du står där sedan och ska försöka städa din inkonsistenta databas, det kan jag garantera dig.

För övrigt kommer det vid något visst stadium ändå krävas att du joinar ihop några tabeller om du nu skulle vilja ha reda på ett landnamn i klartext eller så.
Citera
2008-04-02, 08:02
  #8
Medlem
Då kör jag med joins.

Tack så mycket.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback