AWS

This is an explanation of each item when creating a table with MySQL Workbench.

MySQL Workbenchでテーブルを作成する

 MySQL Workbenchでテーブルを作成する際の各項目の説明です。

Table

Table Name
テーブル名(Table Name)は、リレーショナルデータベース管理システム(RDBMS)内でデータを整理し、格納するための構造体(テーブル)を識別するために使用される名前です。テーブルはデータベース内で最も基本的なストレージの単位であり、行(レコード)と列(フィールドまたは属性)の2次元のグリッドでデータを格納します。
テーブル名の重要性
識別
データベース内の特定のテーブルを一意に識別します。これにより、クエリ、データの挿入、更新、削除などの操作を正確にそのテーブルに対して行うことができます。
組織化
関連するデータを論理的にグループ化し、データ管理とアクセスを容易にします。例えば、employees、products、ordersなどのテーブル名からは、それぞれのテーブルに何が格納されているかが直感的に理解できます。
スキーマ定義
テーブル名は、そのテーブルのスキーマ(テーブル構造を定義する属性や制約の集合)の一部として機能します。スキーマは、テーブルにどのようなデータが格納されるか、どのように整理されるかを定義します。
テーブル名の命名規則
明確性
テーブルの内容を明確に表す名前を選ぶことが重要です。例えば、従業員のデータを格納するテーブルは employees のように命名します。
一貫性
データベース内で一貫した命名規則を使用します。これにより、データベースの構造がより理解しやすくなります。
短縮形の回避
可能な限り、短縮形や略語の使用を避け、完全な単語を使用して名前をつけることが望ましいです。ただし、業界標準の略語は例外となることがあります。
大文字小文字の一貫性
一部のデータベースシステムでは大文字と小文字が区別されるため、大文字小文字の使用に一貫性を持たせることが重要です。
テーブル名の制限
文字数
MySQLにはテーブル名の文字数制限があります。MySQLのドキュメントによると、テーブル名(および他の識別子)の最大長はデータベースシステムの設定によって異なりますが、一般的には64文字までとされています。この制限は、MySQLのバージョンや使用しているファイルシステム、およびデータベースの設定によって異なる場合があります。
使用可能な文字
一般的にはアルファベット(大文字・小文字)、数字、アンダースコアが使用できますが、特殊文字やスペースの使用は避けるべきです。
予約語を避ける
SQLの予約語(SELECT、INSERT、DELETEなど)はテーブル名として使用しないでください。
テーブル名を選択する際には、その名前がデータの内容と目的を正確に反映し、データベース全体での一貫性と整理を促進するように心掛けることが重要です。
Charset/Collation
MySQLにおける Charset(文字セット)と Collation(照合順序)は、データベース、テーブル、またはカラムレベルで文字データの扱い方を定義するために使用される属性です。これらは文字データの格納、比較、および検索の振る舞いを制御します。
Charset(文字セット)
説明
文字セットは、文字を表現するために使用されるエンコーディングのセットです。MySQLでは、utf8mb4、latin1、sjisなど、さまざまな文字セットをサポートしています。文字セットは、使用する文字とその文字をバイトとしてどのように格納するかを定義します。
目的
異なる言語の文字を適切に格納し、処理するために使用されます。例えば、多言語サポートが必要な場合は utf8mb4 を使用することで、絵文字を含むあらゆる Unicode文字を扱うことができます。
使用例
データベースを作成する際に、下記のように指定します。

SQL

CREATE DATABASE mydb CHARACTER SET utf8mb4;
Collation(照合順序)
説明
照合順序は、文字セット内の文字が比較される際のルールを定義します。これには、大文字と小文字の区別、アクセントの有無の扱い、および文字間のソート順が含まれます。例えば、utf8mb4_general_ciは、大文字小文字を区別せず(ciは case-insensitiveの略)、一般的な比較ルールに基づいて utf8mb4文字セットの文字を比較します。
目的
文字列のソートや比較を正確に行うため、特定の言語や地域に合わせた照合順序を選択することができます。
使用例
テーブルを作成する際に、下記のように指定します。

SQL

CREATE TABLE mytable (name VARCHAR(100)) COLLATE utf8mb4_unicode_ci;
文字セットと照合順序の関係
文字セットと照合順序は密接に関連しています。照合順序は特定の文字セットに属し、その文字セット内での文字の比較とソートの方法を決定します。したがって、照合順序を指定する際には、それが適用される文字セットを意識する必要があります。また、MySQLでは、デフォルトの文字セットと照合順序をサーバー、データベース、テーブル、カラムレベルで異なるものに設定することができます。これにより、アプリケーションの国際化や多言語対応を柔軟に実現することが可能になります。
適切な文字セットと照合順序の選択は、グローバルなアプリケーションの開発において特に重要です。これにより、さまざまな言語のデータを正確に扱い、ユーザーにとって自然な形でデータを表示および処理することができます。
Engine
MySQLでは、さまざまなストレージエンジンが用意されており、それぞれが異なる特性や機能を提供します。ストレージエンジンは、データの格納、取得、更新の方法を定義します。データベースの設計や要件に応じて、最適なエンジンを選択することが重要です。
InnoDB
MySQLのデフォルトストレージエンジンで、トランザクション安全性(ACID準拠)、ロールバック、クラッシュリカバリ能力を備えています。外部キー制約をサポートし、大量の並行トランザクションを効率的に処理できます。ほとんどのユースケースに適しています。
MyISAM
高速な読み取り操作、フルテキスト検索インデックスをサポートしていますが、トランザクション安全性は提供しません。InnoDBに置き換えられる前は、MySQLのデフォルトエンジンでした。
ndbcluster
分散コンピューティング環境向けに設計されたストレージエンジンで、高可用性とスケーラビリティを提供します。リアルタイムデータベースの要件や、フォールトトレラントなシステムに適しています。
MEMORY
データをメモリ上に格納するため、非常に高速なアクセスを提供しますが、サーバーが停止するとデータは失われます。主に一時データや読み取り専用のデータキャッシュに使用されます。
FEDERATED
FEDERATEDストレージエンジンは、リモートの MySQLサーバーに格納されているテーブルに対して、ローカルサーバーから直接 SQL操作を行うことを可能にします。つまり、FEDERATEDテーブルを介して、別のサーバー上にあるデータベーステーブルを操作できるようになります。これにより、分散データベースの設計や、複数のサーバー間でデータを共有するアーキテクチャを実装することが可能になります。ただし、FEDERATEDエンジンを使用するには、リモートサーバーも MySQLを実行している必要があります。
ARCHIVE
圧縮を使用してデータを格納するため、大量の履歴データやログデータの保管に適しています。読み取り専用のクエリに対応し、書き込み操作時にのみ圧縮を行います。
CSV
データをコンマ区切り値(CSV)ファイル形式で格納します。テキストエディタやスプレッドシートソフトウェアで簡単に読み書きできるため、データのインポート・エクスポートに便利です。
BLACKHOLE
書き込まれたデータをすべて破棄し、実際にはデータを格納しません。レプリケーションのフィルタリングやベンチマークテストに有用です。
MRG_MyISAM
複数の MyISAMテーブルを1つのマージテーブルとして扱うことができる。このエンジンは、主に読み取り専用のデータに対して使用され、大量のデータを持つテーブルを効率的に管理するための仮想的なビューを提供します。MRG_MyISAMを使用することで、複数のMyISAMテーブルを1つのテーブルのように参照し、クエリを実行することが可能になります。
これらのストレージエンジンは、特定の要件やパフォーマンスの目標に応じて選択されます。例えば、トランザクションの整合性を保証する必要があるアプリケーションでは InnoDB が推奨され、一方で、高速な読み取りが重要でトランザクションの整合性がそれほど重要でない場合は MyISAM が適している場合があります。選択するエンジンによって、データの処理方法やアプリケーションのパフォーマンスに大きな影響をあたえる事があります。
Comments
テーブルに関する説明を追加できます。このコメントは、データベースのメタデータとして格納され、後で参照できます。

SQL

ADD COLUMN age INT;

Column

Column Name(カラム名)
追加するカラムの名称です。カラム名はそのテーブル内で一意でなければなりません。
Data Type(データ型)
MySQLで使用できるデータ型は多岐にわたり、それぞれ特定の種類のデータを格納するために設計されています。
バイナリ型
BINARY
固定長のバイナリデータを格納します。格納されるデータが指定された長さに満たない場合、残りはゼロで埋められます。
VARBINARY
可変長のバイナリデータを格納します。指定された最大長までのデータを格納できます。
BLOB
バイナリデータを格納するための大きなオブジェクト。画像や音声などの大きなファイルを格納するのに適しています。
TINYBLOB
非常に小さいバイナリデータを格納します。
MEDIUMBLOB
中程度のサイズのバイナリデータを格納します。
LONGBLOB
非常に大きなバイナリデータを格納します。
日付および時刻型
DATE
日付のみを格納します(例: 2024-02-19)。
DATETIME
日付と時刻を格納します(例: 2024-02-19 14:30:00)。
TIME
時刻のみを格納します(例: 14:30:00)。
TIMESTAMP
UNIXタイムスタンプとして日付と時刻を格納します。自動的に現在の日付と時刻に更新されることがあります。
YEAR
年を格納します(例: 2024)。4桁または 2桁の形式が可能です。
空間データ型
GEOMETRY
任意の種類の空間データ(点、線、多角形など)を格納します。
POINT
単一の地点を表します。
LINESTRING
2点以上の地点を結んだ線を表します。
POLYGON
閉じた領域を表します。
MULTIPOINT
複数の点を格納します。
MULTILINESTRING
複数の線を格納します。
MULTIPOLYGON
複数の多角形を格納します。
GEOMETRYCOLLECTION
上記の任意の組み合わせを格納します。
数値型
TINYINT
非常に小さい整数を格納します。例えば、-128 から 127 まで、または符号なしで 0 から 255 まで。
SMALLINT
小さい整数を格納します。例えば、-32768 から 32767 まで、または符号なしで 0 から 65535 まで。
MEDIUMINT
中程度の大きさの整数を格納します。例えば、-8388608 から 8388607 まで、または符号なしで 0 から 16777215 まで。
INT
標準的な整数を格納します。例えば、-2147483648 から 2147483647 まで、または符号なしで 0 から 4294967295 まで。
BIGINT
非常に大きな整数を格納します。例えば、-2^63 から 2^63-1 まで、または符号なしで 0 から 2^64-1 まで。
FLOAT
単精度浮動小数点数を格納します。小数点以下の精度は約 7桁です。
DOUBLE
倍精度浮動小数点数を格納します。小数点以下の精度は約 15桁です。
DECIMAL
固定小数点数を格納します。精度(桁数)とスケール(小数点以下の桁数)を指定できます。
REAL
DOUBLEと同じ倍精度浮動小数点数を格納します(SQL標準に基づく)。
文字列型
CHAR
固定長の文字列を格納します。指定された長さに満たない場合、空白で埋められます。
VARCHAR
可変長の文字列を格納します。指定された最大長までの文字列を格納できます。
JSON
JSON形式のデータを格納します。
NCHAR
固定長の国際化文字列を格納します。CHARと同様ですが、国際化文字セットを使用します。
NVARCHAR
可変長の国際化文字列を格納します。VARCHARと同様ですが、国際化文字セットを使用します。
テキスト型
TINYTEXT
非常に小さいテキストを格納します。
TEXT
テキストデータを格納します。
MEDIUMTEXT
中程度の長さのテキストを格納します。
LONGTEXT
非常に長いテキストを格納します。
その他の型
BIT
ビット値を格納します。フラグや状態を表すのに便利です。
BOOLEAN
真偽値を格納します。実際には TINYINT(1) のエイリアスです。
ENUM
事前に定義されたリストから選択された文字列を格納します。
SET
事前に定義されたリストから0個以上選択された文字列を格納します。
これらのデータ型を理解し適切に使い分けることで、データベースの効率的な設計と運用が可能になります。
Default
カラムのデフォルト値を指定します。レコード挿入時に値が指定されなかった場合、このデフォルト値が使用されます。これは厳密には制約ではありませんが、データの整合性を保つためによく使用されます。

SQL

CREATE TABLE users (created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Comments
カラムに関する説明を追加できます。このコメントは、データベースのメタデータとして格納され、後で参照できます。

SQL

ADD COLUMN age INT COMMENT 'Applicant age';
Constraints(制約)
MySQLにおけるカラムに指定可能な制約(Constraints)は、データの整合性を維持するためのルールや条件を設定することを可能にします。
Primary Key
テーブル内の各レコードを一意に識別するためのカラム(またはカラムの組)に設定します。PRIMARY KEY制約は、自動的にNOT NULL制約を含み、その値はテーブル内で一意でなければなりません。

SQL

CREATE TABLE users (id INT PRIMARY KEY);
Not Null
この制約が設定されたカラムは、NULL値を受け付けません。つまり、そのカラムには必ず何らかの値が格納される必要があります。

SQL

CREATE TABLE users (id INT NOT NULL);
Unique
同じテーブル内で、この制約が設定されたカラムの値はユニーク(一意)でなければなりません。つまり、重複する値を持つレコードを挿入することはできません。

SQL

CREATE TABLE users (email VARCHAR(255) UNIQUE);
Binary
BINARY属性は、文字列型のデータに適用されます。これにより、データはバイナリの正確な比較が可能になる二進形式で格納されます。例えば、VARCHAR型やCHAR型のカラムにBINARYを指定することで、大文字と小文字を区別するバイナリ比較が行われます。

SQL

CREATE TABLE example (name CHAR(10) BINARY);
Unsigned
UNSIGNED属性は、数値型のデータ(例えば、INT、FLOATなど)に適用され、負の数を格納できないようにします。これにより、その型が扱える正の数値の範囲が拡大します。

SQL

CREATE TABLE example (age INT UNSIGNED);
Zero Fill
ZEROFILLは、数値型のカラムに対して使用されます。これを指定すると、格納された値がカラムの表示幅に達しない場合、残りのスペースをゼロで埋めます。ZEROFILLを指定すると自動的にUNSIGNEDが適用されます。

SQL

CREATE TABLE example (id INT(4) ZEROFILL);
この例では、idが100の場合、0100と表示されます。
Auto Increment
整数型のカラムに対して使用でき、レコードが追加されるたびに自動で値が 1ずつ増加します。通常、主キーとして設定されたカラムで使用されます。

SQL

ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY;
Generated
GENERATED属性を使用して、仮想カラムまたは格納カラムを定義します。これは、他のカラムの値から計算される値を持つカラムを作成するために使用されます。仮想カラムは、アクセスされるたびにオンザフライで値が計算されるのに対し、格納カラムはテーブルに物理的に値が格納されます。

SQL

CREATE TABLE example (a INT, b INT, c INT GENERATED ALWAYS AS (a + b) STORED);
これらの属性を適用することで、データの格納方法、表示方法、および計算方法を細かく制御することができます。これにより、データベースの柔軟性と効率性が向上し、アプリケーションの要件に合わせた最適なデータ構造を実現することが可能になります。
Storage
MySQLでは、GENERATEDカラムを定義する際に VIRTUAL または STORED のキーワードを使用して、そのカラムが仮想か格納されるかを指定できます。これらは計算された値を持つカラム(Generated Columns)に関連する概念で、データベース内の他のカラムの値から動的に計算される値を格納する方法を提供します。
VIRTUAL Generated Columns
VIRTUALキーワードを使用した Generated Columnは、クエリが実行されるたびにオンザフライで値が計算されるカラムです。物理的にディスク上に格納されることはなく、テーブルの行が読み込まれるたびに計算されます。そのため、ディスクスペースを節約できますが、計算には毎回コスト(パフォーマンスコスト)がかかります。

SQL

CREATE TABLE example (a INT, b INT, sum INT AS (a + b) VIRTUAL);
STORED Generated Columns
STOREDキーワードを使用した Generated Columnは、テーブルに行が挿入または更新されるときに計算され、その結果がディスク上に物理的に格納されるカラムです。一度計算された値は、関連する他のカラムの値が変更されない限り、再計算されることはありません。これにより、クエリのパフォーマンスが向上しますが、追加のディスクスペースを消費します。

SQL

CREATE TABLE example (a INT, b INT, sum INT AS (a + b) STORED);
選択基準
  • ディスクスペースの節約が優先される場合や、計算結果が頻繁にはアクセスされない場合は、VIRTUALカラムが適しています。
  • クエリのパフォーマンスが最優先事項であり、計算結果へのアクセスが頻繁に発生する場合は、STOREDカラムが適しています。