SQL에서 JSON으로의 데이터 모델링은 제가 첫 번째 파트에서 다룬 내용입니다. "SQL Server에서 Couchbase로 이동" 시리즈. 이 블로그 게시물 이후, 다음과 같은 새로운 도구가 제 관심을 끌었습니다. 해코레이드는 최근 도구에 최고 수준의 카우치베이스 지원을 추가했습니다.
이 글에서는 제가 직접 수행한 아주 간단한 모델링 연습을 검토하고 IntegrIT의 Hackolade가 어떻게 도움이 될 수 있는지 보여드리겠습니다.
이전 블로그 게시물 시리즈에서 사용한 것과 동일한 SQL 스키마를 사용하고 있으며, 다음에서 찾을 수 있습니다. GitHub(SQLServerDataAccess/Scripts 폴더 내).
검토하기: SQL에서 JSON으로 데이터 모델링
먼저 관계형 데이터베이스에서 관계를 표현하는 주요 방법은 테이블 간의 키/외래 키 관계를 사용하는 것입니다.
JSON에서 모델링을 살펴볼 때 관계를 표현하는 데는 크게 두 가지 방법이 있습니다:
- 참조 - 개념에는 자체 문서가 주어지지만 문서 키를 사용하여 다른 문서를 참조합니다.
- 비정규화 - 키를 사용하여 문서 간에 데이터를 분할하는 대신 개념을 하나의 문서로 그룹화하세요.
저는 장바구니와 소셜 미디어 사용자에 대한 관계형 모델로 시작했습니다.
제 예제에서 관계형 데이터베이스의 쇼핑 카트 - 대상 - 쇼핑 카트 항목 관계는 아마도 단일 쇼핑 카트 문서(항목 포함)로 JSON에 더 잘 표현될 것이라고 말씀드렸습니다. 이것이 바로 "비정규화" 경로입니다. 그런 다음 소셜 미디어 사용자 - 대상 - 소셜 미디어 사용자 업데이트 관계를 참조 관계로 JSON에 표현하는 것이 가장 좋다고 제안했습니다. 업데이트는 사용자와 별도로 자체 문서에 저장됩니다.
이 과정은 전적으로 수작업으로 이루어졌습니다. 간단한 예제에서는 어렵지 않았습니다. 하지만 규모가 큰 모델에서는 SQL을 JSON으로 변환하는 데이터 모델링을 지원하는 도구가 있으면 도움이 될 것입니다. 완전히 자동화된 것은 아니므로 여전히 약간의 수작업이 필요하지만 도구가 많은 작업을 대신해 줄 수 있습니다.
SQL Server DDL로 시작하기
다음 부분에서는 이미 SQL 스크립트를 실행하여 5개의 테이블을 생성했다고 가정합니다: 쇼핑카트항목, 쇼핑카트, 친구북사용자, 친구북업데이트, 친구북사용자친구. (물론 자체 데이터베이스에서도 자유롭게 시도해 보세요.)
첫 번째 단계는 스키마의 DDL 스크립트를 만드는 것입니다. SQL Server 관리 스튜디오를 사용하여 이 작업을 수행할 수 있습니다.
먼저 원하는 데이터베이스를 마우스 오른쪽 버튼으로 클릭합니다. 그런 다음 '작업'으로 이동한 다음 '스크립트 생성'으로 이동합니다. 그러면 마법사가 표시됩니다. 각 단계에서 "다음"을 클릭하기만 하면 되지만, 이 작업을 처음 해본다면 각 단계의 지침을 읽고 무슨 일이 일어나는지 이해하는 것이 좋습니다.
마지막으로 지정한 경로에 SQL 파일이 생성됩니다.
이 파일은 다음과 같은 일련의 만들기
그리고 ALTER
문을 포함해야 합니다(적어도). 다음은 제가 작성한 내용을 간략하게 발췌한 것입니다(아래에서 깃허브의 정식 버전).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
만들기 표 [dbo].[친구북 업데이트]( [Id] [고유식별자] NOT NULL, [게시된 날짜] [날짜 시간] NOT NULL, [본문] [nvarchar](256) NOT NULL, [UserId] [고유식별자] NOT NULL, 컨스트레인트 [PK_친구북 업데이트] 기본 KEY 폐쇄됨 ( [Id] ASC )WITH (PAD_INDEX = 꺼짐, 통계_노어컴퓨트 = 꺼짐, IGNORE_DUP_KEY = 꺼짐, 허용_행_잠금 = 켜기, 허용_페이지_잠금 = 켜기) 켜기 [기본] ) 켜기 [기본] GO -- 등... |
참고로 이 기능은 SQL Azure 데이터베이스에서도 작동합니다.
참고: Hackolade는 SQL Server뿐만 아니라 Oracle, MySQL 등 다른 유형의 DDL에서도 작동합니다.
해코레이드 시작하기
다음 부분에서는 Hackolade를 다운로드하여 설치했다고 가정합니다. 이 기능은 Hackolade 프로페셔널 버전에서만 사용할 수 있지만 30일 무료 평가판을 사용할 수 있습니다.
DDL 파일이 생성되면 Hackolade를 열 수 있습니다.
해코레이드에서는 JSON 모델에 해당하는 모델을 생성/편집하게 됩니다: Couchbase(물론)와 DynamoDB 및 MongoDB입니다. 이 예제에서는 새로운 Couchbase 모델을 만들어 보겠습니다.
이 시점에서 "새 버킷"이 포함된 새로운 모델이 생겼습니다. 해콜레이드를 디자인 도구로 사용하여 버킷에 넣을 문서의 종류, 다른 문서와의 관계 등을 시각적으로 표현할 수 있습니다.
이미 관계형 모델과 SQL Server DDL 파일을 가지고 있으므로 Hackolade가 이를 통해 무엇을 할 수 있는지 살펴보겠습니다.
SQL을 JSON 데이터 모델링으로 리버스 엔지니어링하기
Hackolade에서 도구 → 리버스 엔지니어 → 데이터 정의 언어 파일로 이동합니다. 데이터베이스 유형과 DDL 파일 위치를 선택하라는 메시지가 표시됩니다. 저는 "MS SQL Server"와 앞서 만든 "script.sql" 파일을 선택합니다. 마지막으로 "확인"을 눌러 Hackolade가 마법을 부리도록 합니다.
해콜레이드는 5개의 테이블을 5개의 서로 다른 종류의 문서로 처리합니다. 따라서 최종 결과물은 다음과 같습니다. 리터럴 번역.
이 다이어그램은 모델에 대한 보기를 제공합니다. 하지만 이제 이 다이어그램은 궁극적인 JSON 모델을 구성하기 위한 캔버스라고 생각할 수 있습니다. 해콜레이드는 이를 도와주는 몇 가지 도구를 제공합니다.
비정규화
예를 들어, 해콜레이드는 SQL을 JSON 데이터로 모델링할 때 비정규화에 대한 제안을 할 수 있습니다. 도구→비정상화 제안으로 이동합니다. "테이블 선택"에 문서 종류 목록이 표시됩니다. "쇼핑 카트"와 "쇼핑 카트 항목"을 선택해 보세요. 그런 다음 '매개변수' 섹션에서 '부모에 배열'을 선택합니다.
이렇게 하면 다이어그램이 다르게 보이는 것을 볼 수 있습니다. 이제 항목이 쇼핑카트의 배열에 포함되고 쇼핑카트 항목으로 가는 점선이 있습니다. 이 시점에서 모델에서 쇼핑카트 항목을 제거할 수 있습니다(경우에 따라 쇼핑카트 항목을 그대로 두고 싶을 수 있으므로 SQL에서 JSON 데이터 모델링을 수행할 때 Hackolade에서 자동으로 제거하지 않습니다).
여기에도 다른 옵션이 있다는 것을 알아두세요:
- 부모에 배열 포함하기 - 위에서 설명한 내용입니다.
- 하위 문서에 하위 문서 포함하기 - 반대 방식으로 모델링하려는 경우(예: 쇼핑 카트를 쇼핑 카트 항목 내에 저장).
- 둘 다 포함 - 상위 문서와 하위 문서의 배열 모두 접근 방식입니다.
- 양방향 참조 - 다대다 관계를 나타냅니다. 관계형 테이블에서는 일반적으로 "정션 테이블" 또는 "매핑 테이블"을 사용하여 이 작업을 수행합니다.
참고 사항 캐스케이딩. 이는 부모, 자식, 손자 등이 있을 수 있는 순환 참조를 방지하기 위한 것입니다. 캐스케이드할 범위를 선택합니다.
추가 정리
이 모델을 정리하기 위해 할 수 있는 몇 가지 다른 작업이 있습니다.
- '유형' 필드 추가. Couchbase에서는 장바구니 문서를 다른 문서와 구별해야 할 수도 있습니다. 이를 위한 한 가지 방법은 일반적으로 '유형'이라고 하는 "판별자" 필드를 추가하는 것입니다(하지만 원하는 대로 불러도 됩니다). 해콜라이드에서는 "쇼핑카트"를 "기본" 값으로 지정할 수 있습니다.
- 임베디드 배열에서 'id' 필드를 제거합니다.. SQL 테이블에는 외래 키 관계를 위해 이 필드가 필요했습니다. 이제 모든 것이 단일 문서에 포함되었으므로 이 필드가 더 이상 필요하지 않습니다.
- 배열 이름을 'items'로 변경합니다.. 다시 말하지만, 이제 장바구니가 단일 문서로 통합되었으므로 '쇼핑 카트 항목'이라고 부를 필요가 없습니다. 그냥 'items'이라고 불러도 괜찮습니다.
출력
이와 같은 모델은 팀이 작업하는 살아있는 문서가 될 수 있습니다. 해콜레이드 모델은 그 자체로 JSON 문서로 저장됩니다. 팀원들과 공유하고 소스 제어에서 확인하는 등의 작업을 할 수 있습니다.
또한 해콜레이드를 사용하여 모델에 대한 정적 문서를 생성할 수도 있습니다. 그런 다음 이 문서를 사용하여 애플리케이션의 개발 및 아키텍처를 안내할 수 있습니다.
파일 → 문서 생성 → HTML/PDF로 이동합니다. 문서에 포함할 구성 요소를 선택할 수 있습니다.
요약
Hackolade는 IntegrIT 회사에서 만든 NoSQL 모델링 도구입니다. 처음부터 모델을 구축할 때뿐만 아니라 SQL에서 JSON 데이터 모델링을 위한 리버스 엔지니어링에도 유용합니다. 이 글에서 다루지 않은 Hackolade의 다른 기능도 많이 있습니다. 다음 기능을 사용해 보시기 바랍니다. 지금 해코레이드 무료 체험판을 다운로드하세요.. 또한 다음을 찾을 수도 있습니다. 해코레이드 트위터 @hackolade.
카우치베이스 서버에 대해 궁금한 점이 있으시다면 카우치베이스 포럼. 또한 카우치베이스 개발자 포털 에서 개발자용 Couchbase에 대한 자세한 정보를 확인하세요. 언제든지 자유롭게 트위터 @mgroves로 문의하세요..