Länkning av tabeller i databaser
Låt oss anta att vi har en tabell med användarnamn och de städer där de bor:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Nackdelen med denna tabell är att samma stad upprepas flera gånger för olika användare. Detta leder till vissa problem.
För det första leder den ständiga upprepningen till att databasen tar upp mycket mer utrymme.
För det andra är det ganska obekvämt att utföra operationer med städer. Till exempel vill vi visa en lista över alla städer på skärmen. Så enkelt går det inte att göra. Vi måste få alla användare tillsammans med deras städer, sedan ta bort dubbletter från de erhållna städerna och först då får vi denna lista.
Och låt oss nu föreställa oss att databasen har 10000
användare från 10
städer - för dessa 10
städer måste vi hämta hela tabellen
med ett enormt antal rader - det blir
en mycket långsam operation med meningslös
resursförbrukning.
Lösning på problemet
Vi behöver dela upp vår tabell i två: i den ena
kommer städer att lagras, och i den andra - användare.
Samtidigt kommer det i tabellen med användare att finnas en kolumn
city_id, som kommer att referera
till användarens stad.
Så, låt oss skapa två tabeller. Tabell med städer:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Tabell med användare:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Antag att du behöver lagra varor (namn, pris, kvantitet) och kategorier för dessa varor. Beskriv lagringsstrukturen.
Antag att du behöver lagra floder och hav som floderna mynnar ut i. Beskriv lagringsstrukturen.
Antag att du behöver lagra städer och länder där de finns. Beskriv lagringsstrukturen.