이전 모듈에서 우리는 데이터베이스의 개념을 소개하고 데이터베이스가 저장하는 데이터 유형에 대해 논의했으며 데이터 검색을 위해 REST API 요청을 보내는 방법을 연습했습니다. 동시에 우리는 프로세스의 외부 참가자로 남아 다양한 출처에서 정보를 요청했습니다.

데이터베이스를 만들 시간입니다! 이 모듈에서는 데이터가 데이터베이스에 저장되는 방식과 상호 연결되는 방식을 이해합니다. 그러나 우선 이론부터 시작하겠습니다. 데이터가 우리에게 오는 형식과 데이터 구조에 따라 데이터베이스가 어떤 범주로 나누어지는지 다루겠습니다.

데이터 기초

데이터 표현

REST API에서 데이터 표현의 절대적인 리더는 JSON 형식입니다. 이전 모듈의 모든 예제에서 이 형식의 데이터를 받았습니다. REST는 형식 선택에 제한을 두지 않는다는 점을 상기할 가치가 있습니다. 앞으로는 다른 사용자(예: XML)를 반드시 만나게 될 것입니다. 동시에 가벼운 무게와 쉬운 가독성 때문에 개발자는 종종 JSON을 선호합니다.

JSON(JavaScript Object Notation) 은 JavaScript를 기반으로 하는 텍스트 기반 데이터 교환 형식입니다. 그리고 제목의 JavaScript에 속지 마십시오. JSON 형식은 이 프로그래밍 언어에서 시작되었지만 완전히 독립적이며 어디서나 사용할 수 있습니다.

JSON 객체가 무엇으로 구성되고 어떻게 작성되는지 봅시다.

수신한 모든 데이터는 중괄호 "{}"로 묶였습니다. 항상 JSON 객체의 시작과 끝에 배치됩니다.

개체 자체는 "키 : 값" 쌍이고 쉼표 ","로 서로 구분되는 일련의 레코드로 구성됩니다.

키는 따옴표 ""로 묶인 항목 자체의 이름입니다. 예: "이름", "값", "지역", "주소". 모든 단어가 될 수 있습니다. 개발할 때 가장 중요한 것은 이 의미가 명확한지 확인하는 것입니다.

값은 다양한 유형이 될 수 있습니다. 모두 고려해 봅시다.

  1. 문자열 . 유니코드 표준의 문자 집합인 텍스트 정보를 포함합니다. 문자열은 따옴표 ""로 묶습니다.
  2. 번호 . 정수 또는 부동 소수점일 수 있습니다. 있는 그대로 작성되며 따옴표를 묶을 필요가 없습니다.
  3. 부울 . 두 값 중 하나입니다. 참이든 거짓이든. 숫자와 마찬가지로 따옴표 없이 작성됩니다.
  4. 배열 . 정렬된 요소 집합입니다. 각 요소는 모든 유형이 될 수 있습니다. 배열은 대괄호 "[]"로 묶이고 요소는 쉼표로 구분됩니다.
  5. 개체 . JSON 값은 다른 JSON 개체일 수 있습니다. 루트 개체와 동일한 규칙이 적용됩니다. 또한 중괄호로 묶이고 자체 레코드 집합을 포함합니다.

이 정보를 염두에 두고 첫 번째 모듈에서 받은 데이터를 보십시오. JSON 구성 요소를 선택하고 수신된 값이 속한 유형을 결정합니다.

데이터 저장

우리는 JSON을 다루었습니다. 이제 우리는 주요 사항인 데이터베이스로 넘어갑니다. 다양한 방법으로 데이터를 저장할 수 있습니다. 동시에 역사적으로 관계형 데이터베이스 모델이 가장 많이 배포되도록 발전했습니다.

관계형 모델을 사용할 때 데이터는 데이터베이스 설계 단계에서 구조가 엄격하게 지정되는 특정 데이터 집합과 함께 테이블 형식으로 저장됩니다. 관계형 데이터베이스의 데이터 구조에 대한 설명을 스키마라고 합니다. 테이블의 구성, 이러한 테이블의 필드 구조 및 테이블 간의 관계를 정의합니다.

DBMS는 SQL 언어를 사용하여 관계형 모델로 데이터를 관리합니다.

SQL - 구조적 쿼리 언어 . 이는 선언적 언어로 해당 명령이 필요한 작업(데이터 찾기, 삭제, 변경)만 설명하고 각 DBMS가 수행 방법을 스스로 결정합니다.

다양한 관계형 DBMS가 있습니다. 가장 일반적인 것은 Oracle, MySQL, MS SQL, PostgreSQL 입니다. 그건 그렇고, AppMaster 는 PostgreSQL을 사용합니다. 즉, 다양한 조직에서 작동하는 현대적인 고급 DBMS를 사용하며 또한 무료 소프트웨어이기도 합니다(즉, 사용에 대해 추가 비용을 지불할 필요가 없음).

거의 모든 DBMS 이름에 SQL 약어가 있다는 것을 알고 계셨습니까? 실제로 관계형 데이터베이스의 대체 이름은 SQL 데이터베이스입니다.

그러나 대안이 있습니다. 비관계형 데이터베이스 또는 NoSQL. 이 경우 No는 "no"의 부정이 아니라 Not only의 약자입니다. 즉, "SQL뿐만 아니라"입니다.

비관계형 DBMS는 공통 쿼리 형식(예: SQL)을 사용하지 않으며 각각 고유한 데이터 작업 방식을 구현합니다.

고유하게 정의된 데이터 저장 구조가 필요하지 않습니다. 데이터 자체는 엄격한 테이블 형식이 아니라 임의의 속성 집합(JSON과 유사)이 있는 개체 형식으로 저장됩니다. 이는 구조가 자주 변경되는 데이터로 작업할 때 관련이 있을 수 있습니다.

동시에 NoSQL 솔루션은 자유 구조로 인해 여러 서버에 분산된 데이터베이스를 생성해야 하는 경우 확장이 더 쉽습니다.

NoSQL DBMS의 예로는 MongoDB 및 Redis가 있습니다.

데이터베이스 디자인

이제 자신의 데이터베이스를 디자인할 때입니다. 이렇게 하려면 왼쪽 패널에서 데이터 디자인 (데이터 디자이너) 탭으로 이동합니다.

데이터베이스의 데이터는 특수 테이블(모델)의 형태로 저장됩니다. 그리고 이미 하나의 모델이 있음을 알 수 있습니다. 권한 부여 모듈의 일부이며 기본적으로 모든 프로젝트에 포함됩니다. 덕분에 애플리케이션의 새로운 사용자가 생성되고 기존 사용자가 관리됩니다. 그러나 우리는 지금 연구에 머무르지 않고 우리 자신의 모델을 만들 것입니다.

지도 서비스를 개발 중이라고 상상해보십시오. 국가에 대한 정보가 포함된 모델을 만들어 보겠습니다. 그것을 만들려면 캔버스의 빈 영역을 마우스 오른쪽 버튼으로 클릭하고 빈 모델 만들기를 선택해야 합니다.

생성하려면 모델 이름만 지정하면 됩니다. 과정의 추가 모듈에서 끝점 및 사용자 인터페이스 요소의 자동 생성을 다룰 것입니다.

생성 직후 모델에는 이미 4개의 필드가 포함되어 있습니다. 이들은 시스템 필드로, 이 필드의 존재는 모델의 초기 생성 및 추가 사용을 크게 단순화합니다.

  1. ID(정수) - 고유 식별자, 기본 키. 테이블의 각 새 항목에 대해 자동으로 생성되며 중복 항목이 없도록 하기 위한 것입니다. 테이블의 레코드를 고유하게 식별할 수 있는 것은 ID입니다. 값은 1에서 시작하여 새 항목마다 자동으로 1씩 증가합니다.
  2. CreatedAt(datetime) - 테이블에서 레코드가 생성된 시간입니다.
  3. UpdatedAt (datetime) - 항목이 마지막으로 수정된 시간입니다.
  4. DeletedAt(날짜/시간) - 항목이 삭제된 시간입니다. 물론 소프트 제거를 사용한 경우에만 가능합니다. 즉, 레코드가 삭제된 것으로 표시되고 해당 레코드에 대한 액세스 요청에 의해 필터링되지만 동시에 물리적으로 테이블에 남아 있는 경우 이러한 삭제가 발생합니다. 이는 실제로 데이터를 완전히 삭제하는 대량 삭제와 다릅니다.

시스템 필드 외에도 생성된 모델에 사용자 정의 필드를 추가하는 것이 현명할 것입니다. 국가의 이름과 그에 대한 정보가 포함된 설명을 보고 싶다고 가정합니다.

필드 유형을 선택하는 것은 문제가 되지 않습니다. 이름에는 String이 적합하고 정보 설명에는 Text가 적합합니다.


또한 4개의 추가 스위치를 사용할 수 있습니다.

  1. 다중 값(배열) - 단일 항목 대신 배열을 사용합니다.
  2. null이 아님 - 지정된 필드는 비워둘 수 없으며 항상 데이터를 포함해야 합니다.
  3. 고유 - 필드 값은 고유해야 합니다. 이 모델에서는 이 필드 값이 동일한 두 개의 레코드가 있을 수 없습니다.
  4. 색인 - 검색 속도를 높이기 위해 이 필드에 대해 특수 색인이 생성됨을 나타냅니다.

일반적으로 정말 필요한 경우에만 표시를 하는 것이 옳습니다. 예를 들어 이름이 없는 국가 또는 이름이 같은 두 국가가 있을 수 없다고 가정하고 국가 이름에 대해 Not null 및 Unique를 표시할 수 있습니다. 다만, 데이터베이스 자체에 제한을 두지 않고 애플리케이션의 로직을 생성하는 단계에서 이를 제어하는 ​​것이 좋다.

마찬가지로 도시에 대한 정보가 포함된 테이블을 만듭니다. 어떤 데이터 필드를 포함할 수 있는지, 이러한 필드의 유형을 생각하십시오.

데이터베이스의 데이터는 분산된 테이블 형태로 자체적으로 존재하지 않습니다. 그들은 특정 방식으로 서로 관련되어 있습니다. 데이터 모델 개발의 핵심은 이러한 관계를 정의하고 관계를 구축하는 것입니다.

이러한 링크를 설정하려면 한 모델의 경계에서 다른 모델까지 마우스로 선을 그려야 합니다. 이 예에서 우리는 각 도시가 특정 국가에 있다는 것을 확실히 알고 있으므로 국가에서 도시로의 링크를 생성할 수 있습니다.


연결에는 3가지 유형이 있습니다.

  1. 일대일(하나 있음) . 테이블의 각 레코드는 연결된 테이블의 하나의 레코드에 매핑됩니다(역으로도 마찬가지입니다). 간단한 예는 사람과 여권입니다. 우리는 항상 이 연결이 고유하다는 것을 확신할 수 있습니다. 여권에는 한 명의 소유자만 있을 수 있으며 각 사람은 유효한 여권을 하나만 가질 수 있습니다.
  2. 일대다(많음) . 한 테이블의 각 레코드는 다른 테이블의 많은 레코드를 가질 수 있습니다. 우리 데이터베이스도 비슷한 예입니다. 국가에는 여러 도시가 있을 수 있지만 각 도시는 한 국가에만 속할 수 있습니다. 이것이 우리가 만들 연결입니다.
  3. 다대다 . 한 테이블의 여러 레코드가 다른 테이블의 여러 레코드에 해당할 수 있는 관계입니다. 간단한 예가 교사와 학생의 관계입니다. 각 학생이 여러 다른 교사로부터 배울 수 있는 것처럼 각 교사는 많은 학생을 가르칠 수 있습니다.

숙제

온라인 상점을 위한 애플리케이션을 개발해야 한다고 상상해 보십시오. 작동할 데이터베이스 모델을 만듭니다.

  • 설명 카드, 다양한 상품 범주, 주문 정보 및 고객 정보가 포함된 상품의 가용성을 제공해야 합니다.
  • 다양한 유형의 필드로 테이블을 채웁니다(최소 5가지 유형 사용).
  • 테이블 간의 관계를 설정합니다. 3가지 링크 유형을 모두 사용합니다.