JSON에서 MySQL 스키마로 변환 — Numio
샘플 JSON으로 MySQL CREATE TABLE 문을 생성합니다. 루트는 generic이라는 테이블이 되고, 중첩 객체나 배열은 각각 부모 기본 키를 참조하는 외래 키를 가진 자식 테이블이 됩니다.
실제 마이그레이션을 작성하기 전에 API 페이로드의 정규화된 테이블 구조를 스케치할 때.
JSON
MySQL Schema
이럴 때 사용하세요
- 실제 마이그레이션을 작성하기 전에 API 페이로드의 정규화된 테이블 구조를 스케치할 때.
- 문서 저장소에서 MySQL로 데이터를 옮길 때 문서의 어떤 중첩 객체와 배열에 별도 테이블이 필요한지 확인할 때.
사용 방법
- JSON 객체 또는 하나의 테이블로 병합될 샘플 레코드 배열을 왼쪽 편집기에 붙여 넣거나, 파일 불러오기 버튼으로 UTF-8 파일을 엽니다.
- 생성된 테이블을 확인합니다. 루트는 generic, 자식은 generic_<key>이며 generic_id 외래 키로 연결됩니다.
- SQL을 복사하고, 실행하기 전에 테이블 이름을 바꾸고 열 타입(예: 가격은 DECIMAL, VARCHAR 길이)을 조정합니다.
JSON 샘플 객체
{
"id": 1024,
"total": 19.5,
"coupon": null,
"created_at": "2026-01-05T10:00:00Z",
"scores": [4, 4.5],
"items": [{ "sku": "A1", "qty": 2 }]
}MySQL CREATE TABLE 문
CREATE TABLE generic ( id INT, total DOUBLE, coupon TEXT, created_at TIMESTAMP, PRIMARY KEY (id) ); CREATE TABLE generic_scores ( generic_id INT, id INT, value DOUBLE, PRIMARY KEY (id), FOREIGN KEY (generic_id) REFERENCES generic(id) ); CREATE TABLE generic_items ( generic_id INT, id INT, sku TEXT, qty INT, PRIMARY KEY (id), FOREIGN KEY (generic_id) REFERENCES generic(id) );
세부 정보 및 제한 사항
정수는 INT(32비트 범위를 벗어나면 BIGINT), 그 밖의 숫자는 DOUBLE, 문자열은 TEXT, 불리언은 BOOLEAN이 됩니다. VARCHAR 길이, NOT NULL, AUTO_INCREMENT, 인덱스는 생성되지 않습니다.
기본 키는 이름이 id이거나 _id를 포함하는 키입니다. 없으면 id 열이 추가됩니다. 18자를 넘고 날짜로 파싱되는 문자열은 TIMESTAMP가 됩니다.
null 값은 TEXT 열이 됩니다. 스칼라 배열에는 value 열을 가진 자식 테이블이 만들어지며, 타입은 모든 요소를 보고 정합니다(위의 scores는 DOUBLE).
브라우저에서 실행되며, 출력은 MySQL 서버로 검증되지 않습니다.
FAQ
소수 값이 DECIMAL이 아니라 DOUBLE이 되는 이유는 무엇인가요?
샘플로는 필요한 정밀도를 알 수 없으므로 정수가 아닌 숫자는 DOUBLE이 됩니다. 금액 열은 직접 DECIMAL(p,s)로 바꾸세요.
테이블 이름을 지정할 수 있나요?
아니요. 루트 테이블은 항상 generic이고 자식 테이블은 generic_<key>입니다. 복사한 SQL에서 이름을 바꾸세요.
INSERT 문도 생성되나요?
아니요, CREATE TABLE만 생성됩니다. JSON 행을 INSERT 문으로 바꾸려면 JSON → SQL 도구를 사용하세요.