데이터베이스에서 테이블 연결
사용자 이름과 그들이 사는 도시가 포함된 테이블이 있다고 가정해 보겠습니다:
| 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 |
상품(이름, 가격, 수량)과 이 상품들의 카테고리를 저장해야 한다고 가정합니다. 저장 구조를 설명하세요.
강과 그 강이 흘러 들어가는 바다를 저장해야 한다고 가정합니다. 저장 구조를 설명하세요.
도시와 그 도시가 위치한 국가를 저장해야 한다고 가정합니다. 저장 구조를 설명하세요.