データディクショナリとは、データベースの「説明書」のようなものです。
参考 データベースとは?
データディクショナリがあることで、多くの人がデータベースを効率よく、正確に使うことが可能になります。
- 何のためにあるのか?: データディクショナリがあると、データベースに何のデータが入っているのか、どういう意味なのかが簡単にわかります。
- 何が書かれているのか?: データの名前(例:「氏名」)や、そのデータのデータ型(例: 文字列、数字)などが記されています。
- 誰が使うのか?: この辞書は、プログラマーやデータアナリスト、企業のデータを扱う人々にとって役立ちます。
- どうやって作るのか?: 専用のツールを使うこともあれば、エクセルやテキストファイルで手作業で作成することもあります。
- 更新は?: 新しいデータが追加されたり、既存のデータが変更されたりしたら、データディクショナリ合わせて更新する必要があります。
このページでは、データディクショナリとは何か?を1分で簡潔に分かりやすくご説明します。
プログラマーやシステムエンジニアを目指す方であれば頭に入れておきたいIT基本知識の1つです。是非最後までご覧下さい。
データディクショナリとは
データディクショナリは、データベースの「辞書」のようなものです。データの名前や型、何に使われるのかなど、データに関する情報をまとめておく場所です。
データディクショナリは、システム的に自動生成されるものもあれば、独自にExcelなどで管理されることもあります。
システム的なデータディクショナリ
多くの現代のデータベース管理システム(DBMS)では、システムカタログと呼ばれる特殊なデータベースやテーブルがあり、これがデータディクショナリの役割を果たします。ここにはテーブル名、カラム名、データ型、制約など、データベーススキーマに関するメタデータが自動的に格納されます。
手動で作成するデータディクショナリ
システムが自動的にデータディクショナリを生成しない、または追加的な情報(説明、用途、データの所有者など)が必要な場合は、Excelや専用のデータディクショナリ管理ツールを使用して独自に作成することがあります。
システム的に生成されるデータディクショナリにはない「業務ルール」や「データガバナンスポリシー」に関する情報を別にシステム外で手動で作成する場合もあります。
データディクショナリの具体例
主要なDBMSごとに、システムで生成されるデータディクショナリの具体例を示します。
データディクショナリは実際の「モノ」を確認すれば、簡単に理解することができるはず。何個かサンプルで示しますので、ざっくりご覧ください。
MySQL
MySQLでは、INFORMATION_SCHEMA
データベースにメタデータが格納されます。
-- テーブルのメタデータを確認する SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_database_name';
サンプル MySQL (INFORMATION_SCHEMA.TABLES
)
TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | TABLE_COMMENT |
---|---|---|---|---|
mydb | users | BASE TABLE | InnoDB | User Information |
mydb | orders | BASE TABLE | InnoDB | Order details |
PostgreSQL
PostgreSQLでもINFORMATION_SCHEMA
が利用できますが、pg_catalog
スキーマもよく用いられます。
-- テーブルのメタデータを確認する SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema';
サンプル PostgreSQL (pg_tables
)
schemaname | tablename | tableowner | tablespace | hasindexes |
---|---|---|---|---|
public | users | postgres | pg_default | t |
public | orders | postgres | pg_default | t |
Oracle Database
Oracleでは、ALL_TABLES
、USER_TABLES
、DBA_TABLES
などのディクショナリビューがあります。
-- テーブルのメタデータを確認する SELECT * FROM ALL_TABLES WHERE OWNER = 'your_schema_name';
サンプル Oracle Database (ALL_TABLES
)
OWNER | TABLE_NAME | TABLESPACE_NAME | CLUSTER_NAME | STATUS |
---|---|---|---|---|
my_schema | users | USERS | user_cluster | VALID |
my_schema | orders | USERS | null | VALID |
Microsoft SQL Server
SQL Serverでは、sys
スキーマ内のテーブルやビューがデータディクショナリとして機能します。
-- テーブルのメタデータを確認する SELECT * FROM sys.tables;
サンプル Microsoft SQL Server (sys.tables
)
name | object_id | type_desc | create_date | modify_date |
---|---|---|---|---|
users | 245575913 | USER_TABLE | 2022-01-01 12:34:56 | 2022-01-01 12:34:56 |
orders | 315315546 | USER_TABLE | 2022-01-02 12:34:56 | 2022-01-02 12:34:56 |
ご覧いただいた通りわかるように、データディクショナリは、そのテーブル自体の情報を保持する別のテーブルとして実装されます。これを見れば、そのテーブルがどんなカラム・データ型を持っているか?を一目で確認することができます。
まとめ:データディクショナリとは
SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。
SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?
とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。