データベース操作について
メモ
- 階層型データベース
階層型データベースは、データを階層構造で組織化するデータモデルの一種です。データは木構造のように階層的に組織化され、親子関係を持ったデータを表現することができます。このデータモデルは、1960年代から1970年代にかけて、主にIBMのIMS(Information Management System)で使用されました。しかし、現在では関係データベースが主流であるため、階層型データベースはあまり使用されていません。
- リレーショナルデータベース(RDB)
リレーショナルデータベース(RDB)は、表形式のデータを管理するデータベースです。RDBでは、データを複数の関連するテーブルに分割し、それらを関係(リレーション)で結びつけます。テーブルは行と列から成り、行は各データレコードを表し、列はデータの属性(フィールド)を表します。RDBはSQL(Structured Query Language)と呼ばれる言語を使用してデータを操作します。RDBは、一般的にビジネスアプリケーションやWebアプリケーションなどで使用されています。主要なRDB製品には、Oracle、MySQL、Microsoft SQL Server、PostgreSQLなどがあります。
- オブジェクト指向データベース
オブジェクト指向データベース(OODB)は、オブジェクト指向プログラミングの概念をデータベースに適用したものです。OODBでは、データをオブジェクトとして表現します。オブジェクトは、属性(データフィールド)とメソッド(操作)から構成されます。また、オブジェクト同士の関係を表現することができます。OODBは、オブジェクト指向プログラミング言語との親和性が高く、プログラム内でオブジェクトを操作する際に、データベースにアクセスする必要がなくなるため、開発効率が向上するとされています。主なOODB製品には、ObjectStore、Versant Object Database、ZODB(Zope Object Database)などがあります。ただし、OODBはリレーショナルデータベースと比較して、規模が大きくなるとパフォーマンスの問題が発生する場合があるため、使用する際には注意が必要です。
- XMLデータベース
XMLデータベースは、XML文書を格納・管理するために特別に設計されたデータベースです。XMLは、タグを用いてデータを階層的に表現することができるため、XMLデータベースは、階層構造を持つデータを管理するのに適しています。XMLデータベースでは、XML文書をフィールドに持つテーブルを作成することができます。また、XPathやXQueryといったXMLのクエリ言語を使用して、XMLデータベース内のデータを検索することができます。XMLデータベースは、特に文書管理やWebアプリケーション開発などの分野で使用されます。代表的なXMLデータベース製品には、eXist、MarkLogic、Taminoなどがあります
- キー・バリュー型データストア
キー・バリュー型データストアは、データをキーと値のペア(バリュー)で管理するデータストアです。データをキーとともに保存するため、高速にアクセスできます。また、分散環境での使用にも適しています。キー・バリュー型データストアは、単純で柔軟な構造を持ち、データモデルがシンプルなため、スケーラビリティが高く、可用性が高い特徴があります。一般的な用途としては、キャッシュやセッションストア、セッションマネージャー、カウンター、ログデータなどが挙げられます。代表的なキー・バリュー型データストアとしては、Redis、Memcached、Amazon DynamoDB、Apache Cassandra、Riakなどがあります。
- 行単位でデータを読み書きする
- 1つのセルには1つのデータしか入れられない
- SQLは機能により3種類に分けられるが、最も使われるのはDML
- セミコロン;で終わる
- 大文字小文字は区別されない
- DDL データ定義言語
DDLは、データ定義言語(Data Definition Language)の略で、データベースの構造(スキーマ)を定義するための言語です。DDLには、以下のようなコマンドがあります。
- CREATE: テーブル、インデックス、ビュー、ストアドプロシージャなどのデータベースオブジェクトを作成します。
- ALTER: 既存のデータベースオブジェクトの構造を変更します。例えば、テーブルに新しい列を追加するなどの変更が可能です。
- DROP: データベースオブジェクトを削除します。
- TRUNCATE: テーブルのデータを全て削除しますが、テーブル自体は削除しません。
- COMMENT: データベースオブジェクトにコメントを追加します。
DDLは、データベース設計の重要な要素であり、データベースオブジェクトの構造を変更する場合にも使用されます。また、DDLコマンドを使用するには、データベース管理者の権限が必要です。
- DMLデータ操作言語
DMLは、データ操作言語(Data Manipulation Language)の略で、データベースのレコードを操作するための言語です。DMLには、以下のようなコマンドがあります。
- SELECT: データベースからレコードを抽出するために使用します。
- INSERT: 新しいレコードをデータベースに挿入します。
- UPDATE: データベース内の既存のレコードを更新します。
- DELETE: データベース内のレコードを削除します。
これらのDMLコマンドを使用することで、データベース内のデータを検索、追加、変更、削除することができます。DMLは、SQL(Structured Query Language)によって実行され、データベースアプリケーションの中核的な要素となっています。DMLコマンドを実行するには、データベースのテーブルやビューにアクセスするための権限が必要です。
- DCLは、データ制御言語
DCLは、データ制御言語(Data Control Language)の略で、データベースのセキュリティとアクセス権限を管理するための言語です。DCLには、以下のようなコマンドがあります。
- GRANT: 特定のユーザーに、データベースオブジェクト(テーブル、ビュー、ストアドプロシージャなど)へのアクセス権を与えます。
- REVOKE: 特定のユーザーから、データベースオブジェクトへのアクセス権を取り消します。
これらのDCLコマンドを使用することで、データベース管理者は、ユーザーアカウントを作成し、必要な権限を設定することができます。また、不正なアクセスや不正な操作からデータベースを保護することもできます。DCLコマンドを実行するには、データベース管理者の権限が必要です。
SQLでテーブルを作成するための基本的な構文
CREATE TABLE テーブル名 (
カラム1 データ型 制約,
カラム2 データ型 制約,
...
カラムn データ型 制約
);
例えば、**employees
**というテーブルを作成する場合は、以下のようになります。
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INT,
gender VARCHAR(10),
salary DECIMAL(10, 2)
);
この例では、employees
というテーブルが作成され、id
、name
、age
、gender
、salary
という5つのカラムが定義されています。id
カラムは主キーであり、name
カラムはNULLを許容しない制約が設定されています。age
、gender
、**salary
**カラムには制約がないため、NULL値が許容されます。
テーブルを作成する際に、カラムのデータ型や制約はデータベースによって異なります。また、オプションの構文やキーワードもあります。必要に応じて、データベースのドキュメントを確認する必要があります。
標準SQLの命名ルールについて
標準SQLでは、次のような命名ルールがあります。
- オブジェクト名の長さは、最大で128文字までとする。
- オブジェクト名は、アルファベット、数字、アンダースコア(_)を使用できる。
- オブジェクト名の先頭は、アルファベットでなければならない。
- オブジェクト名は、大文字と小文字を区別する。
- オブジェクト名には、予約語を使用できない。
具体的には、以下のようなオブジェクトについての命名ルールがあります。
- テーブル名:テーブル名は、主キーのカラム名と区別するため、主キーのカラム名と同じ名前を使用しないことが推奨されます。また、複数の単語を含む場合は、単語の間にアンダースコアを使用するか、キャメルケースを使用することが一般的です。
- カラム名:カラム名は、テーブル内で一意である必要があります。複数の単語を含む場合は、単語の間にアンダースコアを使用するか、キャメルケースを使用することが一般的です。
- 制約名:制約名は、制約がどのカラムに関連しているかを示すため、通常はカラム名を含めることが推奨されます。複数の単語を含む場合は、単語の間にアンダースコアを使用するか、キャメルケースを使用することが一般的です。
- ビュー名:ビュー名は、ビューの内容や意味を表す名前を付けることが推奨されます。
- ストアドプロシージャ名:ストアドプロシージャ名は、ストアドプロシージャの目的や機能を表す名前を付けることが推奨されます。
命名の禁止事項について
標準SQLでは、次のような命名の禁止事項があります。
- 予約語を使用しないこと:予約語は、SQLの構文で特別な意味を持つキーワードであり、オブジェクト名に使用することはできません。例えば、SELECT、FROM、WHEREなどが予約語にあたります。
- 数字から始まる名前を使用しないこと:オブジェクト名の先頭に数字を使用することはできません。
- 特殊文字を使用しないこと:オブジェクト名には、アルファベット、数字、アンダースコア(_)以外の特殊文字(スペース、ハイフン、ドット、カンマなど)を使用することはできません。
- 重複した名前を使用しないこと:同じデータベース内で、テーブル名やカラム名、制約名などを重複して使用することはできません。
これらの禁止事項を遵守することで、SQLの命名規則を正しく守り、オブジェクト名の一意性を保証することができます。
データ型とは、データの種類を表すための定義で、データベース管理システムにおいて重要な役割を担っています。以下に代表的なデータ型をいくつか紹介します。
- 文字列型:文字列を格納するためのデータ型で、一般的にはVARCHAR、CHAR、TEXTなどがあります。
- 数値型:数値を格納するためのデータ型で、一般的にはINTEGER、FLOAT、DOUBLE PRECISIONなどがあります。
- 日付/時刻型:日付や時刻を格納するためのデータ型で、一般的にはDATE、TIME、TIMESTAMPなどがあります。
- ブール型:真偽値を格納するためのデータ型で、一般的にはBOOLEANなどがあります。
- バイナリ型:バイナリデータを格納するためのデータ型で、一般的にはBINARY、VARBINARY、BLOBなどがあります。
データ型は、データベースに格納される値の種類や大きさ、範囲などを定義するために使用されます。データ型の選択は、データの正確性やパフォーマンスに大きく影響するため、慎重に行う必要があります。
データベースには、データの正確性や整合性を保証するために「制約」と呼ばれる仕組みがあります。主要な制約の種類を以下に説明します。
- 主キー制約:テーブル内の各レコードを一意に識別するためのキーを定義します。主キーは重複した値を持つことができず、NULL値を持つこともできません。
- 外部キー制約:異なるテーブル間のデータ整合性を保つために使用されます。外部キーは、参照元のテーブルの主キーに対応する列に定義され、参照先のテーブルの主キーと関連付けられます。
- チェック制約:データが特定の条件を満たすかどうかを確認するために使用されます。例えば、数値列において正の値のみを許可するなどの条件を定義できます。
- NOT NULL制約:列にNULL値が入らないようにします。つまり、その列には必ず値が入るように制限します。
- ユニーク制約:重複した値を持たないようにするために使用されます。つまり、その列に格納される値は一意であることが保証されます。
制約は、テーブルを作成する際に定義され、列レベルやテーブルレベルで設定されることがあります。これにより、データベースに正確な情報が格納され、データの整合性が保たれることが保証されます。
テーブルの削除と変更について説明します。
- DROP (ドロップ)
テーブルの削除には、DROP文を使用します。以下は、テーブルの削除を行う例です。
DROP TABLE テーブル名;
このコマンドを実行すると、指定したテーブルが削除されます。ただし、削除されたテーブルは復元できなくなるため、慎重に実行する必要があります。
- ALTER (アルター)
テーブルの変更には、ALTER文を使用します。以下は、テーブルの変更を行う例です。
ALTER TABLE テーブル名 ADD 列名 データ型;
このコマンドを実行すると、指定したテーブルに新しい列を追加します。他にも、既存の列のデータ型や制約の変更を行うこともできます。ただし、テーブルの変更はデータベースに影響を与えるため、慎重に実行する必要があります。
なお、一部のRDBMSでは、テーブルの変更に対して制限がある場合があります。例えば、Oracle Databaseでは、テーブルに対して変更を行う場合、データベースに対するロックが必要になるため、変更中は他のセッションからのアクセスができなくなります。また、変更によって既存のデータに影響を与える場合があるため、慎重に実行する必要があります。
- RENAME(リネーム)
RENAMEは、データベースにおいて、テーブルや列などの名前を変更するためのSQL文です。一部のデータベースでは、RENAME文はALTER文の一部として扱われます。
RENAME文を使用すると、以下のようにテーブル名や列名を変更することができます。
-- テーブル名を変更する例
RENAME TABLE 旧テーブル名 TO 新テーブル名;
-- 列名を変更する例
ALTER TABLE テーブル名 RENAME COLUMN 旧列名 TO 新列名;
RENAME文によって変更した名前は、その後のSQL文から新しい名前で参照することができます。ただし、RENAME文を使用する際には、データベースによっては注意点があります。例えば、一部のデータベースでは、RENAME文で変更した名前が他のオブジェクトと重複する場合にエラーが発生する場合があります。
また、RENAME文によって変更した名前は、トランザクション処理が必要な場合には、トランザクション内で完了する必要があることがあります。