日付24-[データベース]リレーショナル・データベース


<リレーショナル・データベース>


なぜ1データベースが必要ですか?


▼▼データの保存方法

  • In-Memory
    JavaScriptに格納できるデータは、サーバプログラムの実行時に変数に値を割り当てて格納します.プログラムの実行時にのみ存在するデータであり、データのライフサイクルがプログラムのライフサイクルに依存するため、データの保護が困難であるという欠点がある.
  • File I/O
    スプレッドシート、CSV(Comma Separated Variables)などのファイルにデータを格納し、ファイルI/Oでデータを受信する方式です.欠点は、データが必要になるたびにファイル全体を読み込むため、ファイルが大きいほど効率が低下することです.
  • これを補うために必要なのはデータベースです.必要なデータを格納する「倉庫」などの概念です.この構造を三層アーキテクチャと呼ぶ.

    ▪️ 3-Tier Architecture



    上の図は、3階層アーキテクチャの流れを示しています.三層アーキテクチャの主な利点は機能の論理的および物理的分離である.三層アーキテクチャの利点は大体4つある.
  • の迅速な開発:各層は同時に異なるチームで開発することができ、それによって仕事の効率を高め、アプリケーションの発表速度を速めた.
  • 拡張性の向上:必要に応じて任意のレイヤを他のレイヤから独立して拡張できます.
  • の信頼性が向上した:各層間の隔離により、1つの層の中断が別の層に与える影響は小さい.
  • のセキュリティの向上:クライアントがデータベースと直接通信できないため、セキュリティが向上します.
  • 2朕関係データベースVS NoSQL


    データベースには主にリレーショナル・データベースと非リレーショナル・データベースがあります.リレーショナル・データベースは、テーブルの構造やデータ型などをあらかじめ定義し、テーブルに定義された形式のデータのみを挿入します.リレーショナル・データベースでは、入力データがスキーマ(schema)に一致する必要がありますが、リレーショナル・データベースではなく、データを読み出すときにスキーマに従って読み出すことを「schema on read」とも言います.

    SQLとは?


    SQL(Structured Query Language)は構造化されたクエリー言語であり、データベースのプログラミング言語である.ここで,クエリはデータをフィルタリングするためのクエリ文であると考えられる.クエリーをデータベースに送信して、必要なデータをインポートまたは挿入できます.SQLを使用するには、データ構造が固定されている必要があります.そのため、MySQL、Oracle、SQLite、PostgresSQL、MariaDBなどのリレーショナル・データベースで使用します.

    NoSQLとは?


    SQLを使用できるデータベースとは異なり、データ構造が固定されていないデータベースです.リレーショナル・データベースとは異なり、データはテーブルとは異なる形式で格納されます.MongoDBのようなドキュメント向けのデータベースはこうです.非リレーショナル・データベースは、通常、次のクラスに分類されます.
  • Key Valueタイプ:属性をキー値ペアとして保存します.
    e.g.) Redis, Dynamo
  • ドキュメント型データベース:テーブルではなくドキュメントとしてデータを格納します.JSONと同様に、各ドキュメントに属性のデータがあります.グループ管理します.
    e.g.) MongoDB
  • Wide-Columnデータベース:データベースのカラムデータを一元管理します.1行に複数のカラムを含めることができるため、主に大規模なデータ分析に使用される柔軟性があります.
    e.g.) Cassandra, HBase
  • グラフィック・データベース:ノードに属性(エンティティ)でデータを格納します.各ノード間の関係を直線(edge)で表す.
    e.g.) Neo4J, InfiniteGraph
  • ▼SQLベースのデータベースとNoSQLデータベースの違い


    リレーショナル・データベースのNoSQLデータを使用して、SQLのデータ・テーブル・キー値、ドキュメント、ワイド・カラム、Graphなどの固定形式でアーキテクチャを動的に管理し、構造化クエリ言語(Query Language)UnQL(拡張性)垂直拡張(コストが高い)水平拡張(比較的低コスト)

    ▼SQLベースのリレーショナル・データベースを使用したケース


  • データベースのACID属性を遵守する必要があります
    SQLは、データベースとのインタラクションを正確に規定できるため、データベースの整合性を保護できます.すべての金融サービス(電子商取引を含む)のソフトウェアを開発する際には、ACIDの性質を守らなければならないため、通常はリレーショナル・データベース(SQL)が使用されます.
    ACIDとは?
    ACIDとは、データベース内でトランザクションが発生した場合にその安定性が保証される性質をいう.
  • 原子性:1つのオブジェクト内で、すべての演算が成功するか、またはすべて失敗する必要があります.
  • 一貫性:1つのトランザクションの前後で、データベースが一貫性を保つ必要があります.
  • Isolation(分離、孤立):すべてのオブジェクトが他のオブジェクトから独立している必要があります.
  • Durability(継続性):成功したオブジェクトのログを記録し、永続的に保持します.

  • ソフトウェアで使用されるデータは構造化され、一貫性があります.
    大規模なサーバを必要としないプロジェクトで一貫したデータを使用する場合は、主にリレーショナル・データベースが使用されます.
  • ▼NoSQLデータベースの使用例


  • 格納されているデータ量は大きく、ほとんどまたはまったくデータ構造がありません.
    ほとんどのNoSQLデータベースでは、データ型に制限はありません.ソフトウェア開発に多くの未定型データが必要な場合は、NoSQLを使用することが望ましい.

  • クラウドコンピューティングとストレージスペースの活用
    クラウドベースのデータベース・リポジトリを構築することで、低コストのソリューションを提供できます.データベースの拡張性がソフトウェアにとって重要である場合は、NoSQLデータベースを使用することをお勧めします.

  • サービスの迅速な導入中に、データ構造が頻繁に更新されます.
    NoSQLデータベースでは、アーキテクチャを事前に準備する必要がないため、迅速な開発プロセスに適しています.
  • < SQL >


    1▼▼▼主な文法


    ▼データベースコマンド

  • データベース
  • の作成
    CREATE DATABASE 데이터베이스_이름;
  • データベース
  • を使用
    USE 데이터베이스_이름;
  • データベース
  • を削除
    DROP DATABASE 데이터베이스_이름;
  • テーブル
  • を作成
    CREATE TABLE 테이블_이름
    (
    	PersonID int PRIMARY KEY AUTO_INCREMENT,	// 자동 증가
    	LastName varchar(255),						// 최대 255글자
    	FirstName varchar(255),
    );
    削除
  • DROP TABLE 테이블_이름;
  • テーブルのデータ消去
  • TRUNCATE TABLE 테이블_이름;
    修正
  • ALTER TABLE 테이블_이름
    ADD Birthday DATE;		// DATE 형식의 Birthday 열 추가
    
    ALTER TABLE 테이블_이름
    DROP COLUMN Birthday;	// Birthday 라는 이름의 열 삭제

    ▼SQLコマンド

  • SELECT:選択特性
  • SELECT 특성
  • FROM:選択テーブル
  • SELECT 특성1, 특성2
    FROM 테이블_이름
  • WHERE:特性フィルタ
  • SELECT 특성1, 특성2
    FROM 테이블_이름
    WHERE 특성_1 = "특정 값"			// 특정 값과 동일한 데이터 찾기
    
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_2 <> "특정 값"			// 특정 값을 제외한 값을 찾기
    
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_2 LIKE "%특정 문자열%"	// 특정 값과 비슷한 값들을 필터
    								// "a%": a로 시작하는 값
    								// "%a": a로 끝나는 값
                                    // "%a%": a를 포함한 값
                                    // "_a%": 두 번째 문자가 a인 값
    
    SELECT *						// 모든 특성(*)
    FROM 테이블_이름
    WHERE 특성_1 IS NOT NULL			// 값이 없는 경우를 제외
  • ORDER BY:ソート(デフォルト昇順)
  • SELECT *
    FROM 테이블_이름
    ORDER BY 특성_1 DESC	// 내림차순으로 정렬
  • LIMIT:出力するデータ数(クエリ文の最後に追加)
  • SELECT *
    FROM 테이블_이름
    LIMIT 200		// 데이터 결과를 200개만 출력
  • DISTINCT:ユニークな価格を希望する場合、
  • SELECT DISTINCT 특성_1
    FROM 테이블_이름
  • INNER JOIN(=JOIN):交差
  • SELECT *
    FROM 테이블_1
    JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
    // 테이블_1과 테이블_2를 특성_A와 특성_B가 같은 부분을 기준으로 연결
  • OUTER JOIN
  • SELECT *
    FROM 테이블_1
    LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
    // 왼쪽 테이블(테이블_1) 기준으로 JOIN
    
    SELECT *
    FROM 테이블_1
    RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
    // 오른쪽 테이블(테이블_2) 기준으로 JOIN

    ▼SQL文法練習サイト


    https://www.w3schools.com/sql/sql_exercises.asp

    2アーキテクチャ設計


    インスピレーションとは?


    データベース内のデータの組織方法および異なるエンティティ間の関係の説明を示します.つまり、「データベースの青写真」のようなものです.

    ▼リレーショナルデータベース設計

  • データ(データ):各項目に格納値
  • 表(表;関係):定義済みのデータ列行形式で蓄積された
  • コラム(コラム;フィールド):表の
  • レコード(record;tuple):テーブルの1行に格納されたデータ
  • キー(キー):値
  • 、テーブル内の各レコードを区別するために使用されます.

    上記の画像では、idは、各テーブルのレコードを指し、自動的に1つの値を増加させる数字である.これをPrimary Key(Primary Key)と呼び、別のテーブルでキーを参照する場合、この値をForeign Key(Foreign Key)と呼びます.

    ▼関係の種類

  • 1:1関係
    あるレコードが別のテーブルのレコードに関連付けられている場合、
  • になります.
  • 1:N関係
    1つのレコードが複数の異なるレコードに関連付けられている場合、
  • である.
  • N:N関係
    複数のレコードは、別のテーブルの複数のレコードに関連付けられます.
    ->Joinテーブルを作成して管理し、互いに1:N、N:1にする必要があります.
  • ▼▼Schemaデザインツール


    https://dbdiagram.io