[TIL:36]リレーショナル・データベース設計


✔勘定科目勘定科目SQL:SQLマスター構文


データベースの作成
CREATE DATABASE 데이터베이스_이름;
データベースの使用
USE 데이터베이스_이름;
データベースの削除
DROP DATABASE 데이터베이스_이름;
テーブルの作成
CREATE TABLE 테이블_이름 (
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(255),
  email varchar(255)
);
表情報の表示
DESCRIBE 테이블_이름;
テーブルの削除
DROP TABLE 테이블_이름;
練習問題:SQL QuizSQL Exercises

✔SQLコマンド概要


SELECT:データセットに含める属性を指定する
SELECT 특성
FROM:結果をエクスポートするデータベース・テーブルを指定します.
SELECT 특성_1   // 특성_1, 특성_2, 특성_3 처럼 ','로 복수선택 가능, '*'로 전체선택 가능
FROM 테이블_이름
WHERE:フィルタとして使用されるクエリー文(オプション)
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 = "특정 값"   // 특정 값과 동일한 데이터 찾기

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 <> "특정 값"   // 특정 값을 제외한 값 찾기

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 LIKE "%특정 문자열%"   // 문자열에서 특정 값과 비슷한 값들을 필터링할 때, 
                                // 'LIKE'와 '\%' 혹은 '\*' 를 사용
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 IN ("특정값_1", "특정값_2") // 리스트의 값들과 일치하는 데이터 찾기

SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NULL   // 값이 없는 경우 찾기
ORDER BY:返されたデータ結果をどのような基準で並べ替えて出力しますか(オプション、デフォルトは昇順).
SELECT *
FROM 테이블_이름
ORDER BY 특성_1 DESC   // 내림차순으로 정렬
LIMIT:出力結果のデータ数(オプション、最後に追加)
SELECT *
FROM 테이블_이름
LIMIT 55   // 55개만 출력
DISTINCT:ユニークな価格が欲しい場合
SELECT DISTINCT 특성_1
FROM 테이블_이름
INNER JOINまたはJOIN:2つ以上のテーブルを共通部分に基づいて接続する
SELECT *
FROM 테이블_1
JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
OUTER JOIN:同じ値のない行を返す
SELECT *
FROM 테이블_1
LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B   // 테이블_1 기준

SELECT *
FROM 테이블_1
RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B   // 테이블_2 기준
INSERT INTO:データの追加
INSERT INTO 테이블_이름 (특성_1, 특성_2)
VALUE (값_1, 값_2)
UPDATE SET:データの修正
UPDATE 테이블_이름 
SET 바꿀 특성 = 변경값
WHERE 조건
DELETE:データの削除
DELETE FROM 테이블_이름 
WHERE 조건

勘定科目の関係データベースの設計


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

リレーショナル・データベースのキーワード

  • 데이터(Data):各項目に格納されている値
  • 테이블(Table):予め定義された列のデータ型を用いて書き込まれたデータを行蓄積
  • 필드(Field):行列に相当する列
  • 레코드(Record):表に格納されている項目、行列の行に適用
  • 키(key):表の各レコードの値を区別できます.各レコードには、プライマリ・キー(プライマリ・キー)と外部キー(外部キー)を含む独自の値があります.
    ❓ Foreign Key, Primary Key
    기본키(primary key):リレーショナル・データベース・テーブルの各レコードの属性を固有に識別する.외래키(foreign key):他のTable参照用.
  • リレーショナル・データベース

  • 1:1:1枚のレコードが別のテーブルの1枚のレコードにつながっている.直接保存したほうがいいかもしれないので、あまり使いません.
  • 1:N:1レコードが複数の異なるレコードに関連付けられている場合.△親子関係.
  • N:N:複数のレコードは、他のテーブルの複数のレコードに関連しています.1:N(1対多)関係と似ていますが、2つの方向に複数のレコードを持つことができます.
    管理のためのJoinテーブルを作成します.N:N関係は2つ1:N関係形状は同じ.2つのテーブルと1:N(1対多)の関係を形成する新しいテーブルで、N:N(複数対多)の関係を表すことができ、このテーブルを結合テーブルと呼ぶ.
  • self referencing:テーブル内にも関係が必要な場合に使用します.
  • リレーショナル・データベース設計の体験


    以下は私が作ったInstagramのアーキテクチャ設計です.スキーマを使用すると、エンティティ間の関係やデータ型、フィールドなどがわかります.
    Table Users {
      id int [pk, increment] // auto-increment
      name varchar
      created_at timestamp
    }
    
    Table Followers {
      user_id int
      following_id int
    }
    
    Table Posts {
      id int [pk, increment]
      user_id int
      textcontent varchar
      created_at timestamp
    }
    
    Table Img {
      post_id int
      img_url varchar
    }
    
    Table Posts_hashtags {
      post_id int
      hashtag_id int
    }
    
    Table Hashtags {
      id int [pk, increment]
      hashtag varchar
    }
    
    Table Comments {
      id int [pk, increment]
      post_id int
      user_id int
      content varchar
      created_at timestamp
    }
    
    Table Likes {
      user_id int
      target_id int
    }
    
    Ref: Posts.user_id > Users.id   // 외래키를 사용하요 기본키를 참조해 관계를 나타낸다.
    Ref: Followers.user_id > Users.id
    Ref: Followers.following_id > Users.id
    Ref: Posts_hashtags.post_id > Posts.id
    Ref: Posts_hashtags.hashtag_id > Hashtags.id
    Ref: Img.post_id > Posts.id
    Ref: Comments.post_id > Posts.id 
    Ref: Comments.user_id > Users.id
    Ref: Likes.user_id > Users.id
    Ref: Likes.target_id > Posts.id
    Ref: Likes.target_id > Comments.id 
    https://dbdiagram.io/利用