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