Звязванне табліц у базах даных
Няхай у нас ёсць табліца з імёнамі юзераў і гарадамі, у якіх яны жывуць:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Недахопам гэтай табліцы з'яўляецца тое, што адзін і той жа горад паўтараецца некалькі разоў для розных юзераў. Гэта прыводзіць да некаторых праблем.
Па-першае, пастаяннае паўтарэнне прыводзіць да таго, што база даных пачынае займаць нашмат больш месца.
Па-другое, дастаткова нязручна выконваць аперацыі з гарадамі. Да прыкладу, мы хочам вывесці на экран спіс усіх гарадоў. Так проста гэта зрабіць не атрымаецца. Нам прыйдзецца атрымаць усіх юзераў разам з іх гарадамі, затым выдаліць дублі з атрыманых гарадоў і толькі тады мы атрымаем гэты спіс.
А цяпер уявім, што ў базе 10000
юзераў з 10 гарадоў - ради гэтых 10
гарадоў нам прыйдзецца дастаць усю табліцу
з велізарнай колькасці радкоў - атрымаецца
вельмі павольная аперацыя з бессэнсоўнай
тратай рэсурсаў.
Рашэнне праблемы
Трэба разбіць нашу табліцу на дзве: у адной
будуць захоўвацца гарады, а ў другой - юзеры.
Пры гэтым у табліцы з юзерамі будзе калонка
city_id, якая будзе спасылацца
на горад юзера.
Такім чынам, давайце зробім дзве табліцы. Табліца з гарадамі:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Табліца з юзерамі:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Няхай вам трэба захоўваць тавары (назва, цана, колькасць) і катэгорыі гэтых тавараў. Распішыце структуру захоўвання.
Няхай вам трэба захоўваць рэкі і моры, у якія ўпадаюць гэтыя рэкі. Распішыце структуру захоўвання.
Няхай вам трэба захоўваць гарады і краіны, у якіх яны знаходзяцца. Распішыце структуру захоўвання.