MySQL에 배열을 저장하는 방법
이 자습서에서는 MySQL에서 배열을 필드로 저장하거나 시뮬레이션하는 방법을 보여줍니다.
SQL은 자체 언어 내에서 데이터 유형으로 배열을 명시 적으로 지원하지 않지만 관계형 데이터베이스이기 때문에이를 가능하게하는 많은 해결 방법이 있습니다.
SQL과 같은 관계형 데이터베이스는 관계 및 키를 사용하여 작동합니다. 대부분의 경우 이러한 관계를 활용하여 여러 값을 관련된 단일 행에 연결합니다.
관계는 어레이의 디프로그래밍 버전이며 SQL의 특성 및 설계에 적합합니다(정규화) 참조). 이것이 SQL에 배열 데이터 유형이없는 이유입니다. 관계가 존재하기 때문에 배열이 필요하지 않은 경우가 많기 때문입니다.
데이터베이스의 배열을 잘못 사용하거나 조작하면 위험 할 수 있습니다. 그것들없이 데이터베이스를 구현할 수 있고 매우 최적화 된 데이터베이스를 가질 수 있습니다.
배열을 저장하고 싶거나 저장해야하는 경우 다음과 같은 몇 가지 방법을 사용할 수 있습니다.
MySQL에 배열을 저장하는 관계로 배열 모의
SQL의 특성과 관습을 따르려면 배열을 관계로 취급해야합니다.
한 식당에 여러 개의 주문이있는 고객이 있다고 가정 해 보겠습니다.
먼저 customer
및 order
테이블을 만듭니다.
CREATE TABLE customer (
`id` INT NOT NULL PRIMARY KEY,
`name` VARCHAR(50)
);
CREATE TABLE order (
`order_id` INT NOT NULL PRIMARY KEY,
`order` VARCHAR(40),
`price` DOUBLE
);
고객과 주문에 일대 다 관계; 이를 구현하려면 두 테이블을 서로 연결하기위한 연관 엔티티가 필요합니다.
CREATE TABLE customer_order (
`customer_id` INT NOT NULL,
`order_id` INT NOT NULL,
PRIMARY KEY(`customer_id`, `order_id`)
);
테이블이 다음과 같이 채워져 있다고 가정 해 보겠습니다.
customer
id | name |
---|---|
1 | John Doe |
2 | Jane Doe |
order
order_id | order | price |
---|---|---|
1 | Scallops | 35.00 |
2 | Lobster | 120.00 |
3 | Steak | 80.00 |
4 | Cheesecake | 25.00 |
customer_order
customer_id | order_id |
---|---|
1 | 1 |
1 | 2 |
1 | 4 |
2 | 3 |
2 | 4 |
이 표에서 가리비, 랍스터, 치즈 케이크를 주문하는 John Doe
를 관련시킬 수 있습니다. 한편 제인도는 스테이크와 치즈 케이크를 주문했다.
John Doe
가 주문한 모든 항목을 쿼리하려면 간단히SELECT JOIN
쿼리를 다음과 같이 사용합니다.
SELECT c.name, o.order
FROM customer c
INNER JOIN customer_order co
ON co.customer_id = c.customer_id
INNER JOIN order o
ON o.order_id = co.order_id
WHERE name = 'John Doe'
쿼리는 다음 결과를 생성합니다.
name | order |
---|---|
John Doe | Scallops |
John Doe | Lobster |
John Doe | Cheesecake |
기본적으로 관계는 SQL 버전의 배열입니다. 따라서 좋은 디자인을 유지하고 싶다면 관계의 개념을 이해하고 가능한 한 많이 사용하십시오.
다른 SQL 데이터 유형 내에 배열 저장
MySQL 5.7 업데이트 이상에서 이제 언어는 데이터 유형으로 JSON을 지원합니다. JSON은 SQL에 배열, 집합,지도, 사전 등과 같은 복잡한 데이터 유형을 저장하는 편리한 방법을 제공합니다.
SQL 내에서 배열을 모의 할 수있는 가장 빠른 방법은 문자열로 저장하는 것입니다.
customer
및 order
테이블을 만듭니다.
CREATE TABLE customer (
`id` INT NOT NULL PRIMARY KEY,
`name` VARCHAR(50),
`order` VARCHAR(999)
);
CREATE TABLE order (
`id` INT NOT NULL PRIMARY KEY,
`order` VARCHAR(50),
`price` DOUBLE
);
고객이 주문할 때마다GROUP_CONCAT()
를 사용하여 고객의order
필드에 새 항목을 저장합니다.
UPDATE customer
SET order = CONCAT(order, ', Cheesecake');
UPDATE customer
SET order = CONCAT(order, ', Ravioli');
고객에게 주문을 질의하면 결과가 다음과 같이 표시됩니다.
name | order |
---|---|
John Doe | ,Cheesecake, Ravioli |
이 메서드는 기본적으로 단일 열에 저장되는 배열 유형입니다. 그러나 이것은 SQL이있는 관계형 데이터베이스의 규칙을 따르지 않는다는 것을 의미합니다.
이것은 SQL 내에 배열을 저장하는 효과적인 방법입니다. 그럼에도 불구하고 배열을 새 테이블에 쉽게 저장하고 관계 및 제약 조건을 구성 할 수있을 때 배열을 관계형 데이터베이스에 강제로 적용하는 것은 잘못된 설계로 간주됩니다.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn