Excelに限界を感じた人に向けたDB入門の第一歩

# 今回の趣旨

前回はAccess（LibreOffice Base）推しに終止しました。

+ [Excelに限界を感じた人に向けたDB入門の入り口](https://qiita.com/yamahei/items/8217bf3a32c84636626d)

今回はLibreOffice Baseを教材に、Excelと比較しながらデータベースの雰囲気を掴んでいただければと思います。
と言いつつExcelと同等の無料ソフト、LibreOffice Calc[^calc]を使いますが、そっくりなので問題ないと思います。

# Excelの場合

Excelの場合、表に入力できる状態から始まります。
実はこれ、すごいメリットでもあり、デメリットでもあります。
![Excelでお小遣い帳を作る例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33732/710ba3f8-95fd-5647-8900-ab44e34d33f4.png)

曖昧なイメージで作り始めても、考えながら改善していくことができます。
その反面、曖昧なデータを後から修正することが困難な場合も少なくありません。[^after]


# LibreOffice Baseの場合
![Baseでお小遣い帳データを入力する例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33732/05a769d9-6645-2a13-4a26-bb7012dfa7ae.png)


おや、意外と似てますね。
これならイケるかも。。？

**残念、この画面にたどり着くためには準備が必要です。**

![Baseでお小遣い帳テーブルを作成する例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33732/caf0d726-1a41-400f-ca8c-415614a17606.png)

DBのテーブルは、1行1データとして、各列（フィールドといいます）に入力できる値を決めておく必要があります。
最初に決めたデータ形式以外は入力できないので、データが増えても変なゴミ？が混ざらず、ちゃんと集計できます。[^editable]

「最初にデータ形式を決めなくてはいけない」って面倒ですが、本稿は「Excelに限界を感じた人」を対象としています。
既にExcelで扱うのが苦しい、どうにかしたいデータをお持ちのことでしょう。

# LibreOffice Baseの構成

LibreOffice Baseで新しいデータベースを作ると、こんな画面が表示されます。
![Baseを開いた状態](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33732/2da4b214-b8ac-5893-ca3a-aff6ba637cc3.png)

なんだこりゃ。
Excelとだいぶ違いますね。

LibreOffice Baseの画面でできることと一般的なDBの違いを整理します。

|データ操作|DBの用語|Baseの場合|
|:----|:----|:----|
|追加する|挿入（Insert）|フォーム（またはデータビュー）|
|変更する|更新（Update）|フォーム（またはデータビュー）|
|削除する|削除（Delete）|フォーム（またはデータビュー）|
|見る|抽出（Select）|クエリ（またはデータビュー）|
|印刷する|なし|レポート|

フォームの活躍が際立っています。
レポートはDB界には存在しませんが、現実世界ではデータを（PDF化含め）印刷したいことが多いので、同梱してくれる親切設計。

ちなみにExcelでは上記の操作はすべてシートの中で行ないます。
繰り返しになりますが、この手軽さがExcelの弱点でもあります。


## テーブル

Excelでいうところのワークシートです。
データを管理する表（行×列）のことです。

テーブルを作成する場合、LibreOffice Baseではテーブルデザイン画面で列のデータ形式を入力でします。
一般的なDBではDDL[^ddl]と呼ばれるコマンドで作成します。
![Baseでお小遣い帳テーブルを作成する例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33732/caf0d726-1a41-400f-ca8c-415614a17606.png)


テーブルが作れたらデータを入れたいですね。
LibreOffice BaseではデータビューでExcelっぽく値をイジれます。（実はExcelから取り込むこともできます）
一般的なDBではSQL[^sql]と呼ばれるコマンドで閲覧・編集・削除します。
![Baseでお小遣い帳データを入力する例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33732/05a769d9-6645-2a13-4a26-bb7012dfa7ae.png)

## クエリー

初めて聞く言葉ですね。
DB界ではSQL[^sql]とも呼ばれるもので、本来、すべてのデータ操作はクエリーを使って行ないます。

Excelで関数やオートフィルタ、ピボットテーブルなど、既にあるデータをコネコネした経験があると思いますが、全部クエリでできます。

で、結局クエリってなんだ？に答えていませんが、奥が深すぎるので今回は説明しません。
LibreOffice Baseでは、以下のような画面でSQL[^sql]を使わずに作成します。
![クエリを編集する画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33732/e44443ae-64ff-b69a-d8db-a0f4ede02551.png)


## フォーム

Excelでもフォーム機能はありますが、あまり知られていないかも。

テーブルにデータを入力するための画面のことです。
一般的なDBだと、入力画面は別途プログラミングが必要になります。

## レポート

Excelはシートをそのまま印刷するため、印刷用に整えたシートを準備しますよね。
（入力と印刷を兼ねて使いにくくなったり。。

LibreOffice Baseでは、以下のような流れでデータと印刷を分離します。

1. フォームなどを使ってテーブルにデータを入力する
1. クエリを使って印刷したいデータを選んで集める
1. レポートで罫線などの見栄えや、データの配置を指定する

一般的なDBだと、印刷機能は別途プログラミングが必要になります。

# 最後に

+ 一般的なDBにはDDL[^ddl]とSQL[^sql]しかないので、初学者には分かりにくすぎます。
  + ちょっと何かしたい場合、たいてい別途プログラミングが必要です。
+ LibreOffice Baseは分かりにくさ、使いにくさを軽減するべく画面を提供します。
  + プログラミング無しでアプリケーションのようなものが作れます。
+ 続きを書くかどうかは未定です。



[^calc]: https://ja.libreoffice.org/discover/calc/
[^after]: 例えば、必ず「日付」が入っていて欲しい列に、「日付〜日付」と入力されているためにうまくフィルタできない、と言ったケースです。
[^editable]: もちろん、後から修正することもできます。
[^ddl]: https://ja.wikipedia.org/wiki/データ定義言語
[^sql]: https://ja.wikipedia.org/wiki/SQL