先日、MySQLの入門書を図書館で見つけて借りてきてみました。
勉強するにあたって、まず、MySQLがなんなのかを調べてみると
データベース管理システムとあり、入力された情報などを管理するシステムだとありました。
しかし、どうしてそうしたものが必要になったのかが分かりません。
情報を管理するのであれば、普通にテキストファイルに書き出して、
その場所を明記しておけばいいと思えますし、
情報を取り出したり探したりするのであれば、該当ファイルにgrepなどをかければすむように思えます。
MySQLなどのデータベース管理システムがどうして開発され、使われ続けるのか、
どういった利点があるのか、わかりやすく教えてください。
No.3ベストアンサー
- 回答日時:
簡単にまとめちゃえば、大量のデータを効率よく簡単に統一した形で情報にアクセスできるようにするための基盤です。
利点を思いつく端から並べてみましょう。
ある条件を満たすデータを取り出すだけなら、grep一発ですね。正規表現も使えますから結構なところまである程度簡単にできます。この手で、集計をする・・・例えば、フィールドの合計を計算するとなると出来ますが、かなり上級になってきます。ある一定の条件を満たすレコードのフィールドの合計となったら、コマンドラインを読むだけでもかなり難しくなってきます。あるフィールドの値でグループ分けをして、そのグループ毎の合計となったら、そろそろ音を上げたくなりますね。
SQLなら、この程度までならまだ初級の問題です。
データの更新が絡むと、テキストファイルの欠点が見えてきます。真ん中のデータのあるフィールドだけ修正する必要が出来ると、普通にやれば、全部のデータを読み出して該当のデータだけを修正した形で、もう一度全部書き戻す必要があります。いくらコンピュータの性能が上がったとは言え、大変な不効率です。データが100万レコードで構成されていたら・・・更新が1秒に1件程度発生したら・・・こんな不効率な事をやっていたら、コンピュータの性能にいくらお金をつぎ込んでも足りません(笑)
かくして、いろいろなファイル形式とアルゴリズムが開発されてきました。いわゆるバイナリファイルですが、確かに、ある一つの仕事をするためなら、とても効率よく出来るようになりました。その反面、ファイルの汎用性はなくなりました。バイナリファイルにgrepをかけるわけにはいきませんからね。
いかに効率よく「かつ」データの汎用性を確立するか。それを両立させるために考えられたのが、データベース管理システムです。ファイルの物理格納形式からデータのアクセス方法を隔離してしまえば良い。ファイルの物理格納形式は全部データベース管理システム(DBMS)が面倒を見る。ユーザーは決められた形でDBMSに対してデータへの操作・検索を要求する。これで、汎用性は維持しながら、効率も追求することが出来ます。汎用性を最大限に維持するために、例えばリレーショナルデータベースでは、データの操作のためにSQLという言語が開発され、この言語に関してはある程度までの規格が存在します。(実際には、方言があるので完全に統一するには至っていません。)
さて、目先を変えます。例えば、学校で、学生の住所録があります。成績表もあります。各々別の人が作成保守しているので、別々のテキストファイルです。
住所と成績を同時に記載するレポートを要求されたらどうするかが問題です。両方のファイルをつきあわせて、同じ人のレコードを一つにまとめ上げる必要があるわけですが・・・結構な量のコードを書く必要があります。
しかも、データ量が大きくなると、よほどの工夫をテキストファイルに仕込んでおかないと遅くて使い物にならなくなります。
これが、簡単なコードで、しかも効率よく出来るのも、データの物理形式を、データを操作する側から分離した事によって得られる利点の一つです。SQLでやれば、簡単なコードで終わります。データの設計が正しければ、効率もとても良くできます。
最後の例として、平行性の問題を指摘しておきましょう。100人の人が更新・検索を行うデータがあるとしましょう。テキストファイルでやろうとすると、100人の人が全員別々のレコードしか扱っていなかったとしても、一人ずつ順番にやる必要があります。誰かがファイルを開いたら、他の人はそのファイルを開くことは出来ません。
DBMSを利用すると、このような管理は全て、DBMSに任せることが出来ます。DBMSは大概の場合において、使っているレコードだけをロックしますから、全員が違うレコードを扱っているなら、同時並行で作業が可能です。
こんな書き方をしていると、まだまだいろいろとありますが、とりあえず、ぱっと思いつくことからいくつかあげてみました。
なるほど。
効率化としていままでのテキスト保存とはちがう方法をとっても読めるように、
利便性としてさまざまで複雑な作業を簡略して書きしめせるように、DBMSがあるわけですね。
具体例まであげてもらい、非常によくわかりました。
ご回答ありがとうございました。
No.5
- 回答日時:
例えば、
伝票番号 101 日付5/1 商品コード 111 商品名 A111 数量 3 金額 330 備考
伝票番号 102 日付5/1 商品コード 101 商品名 A101 数量 2 金額 330 備考
伝票番号 103 日付5/1 商品コード 105 商品名 A105 数量 1 金額 101 備考
伝票番号 104 日付5/1 商品コード 111 商品名 A177 数量 2 金額 0 備考 伝票番号 101 の代替品
伝票番号 105 日付5/1 商品コード 111 商品名 A111 数量 2 金額 220 備考
というデータを考えて、伝票番号101の内容を知りたいときに、
grepで「101」を探すと全部出てきてしまいます。
「伝票番号 101 」で探しても、101と104で出てきてしまいます。
さて、困った困ったということで、データベースソフトでは、
伝票番号が101のデータを出力せよと命令できます。
そうすると、1行目だけしかでてきません。
というのが最も必要な理由です。
たしかに目的のものを探すのにいろいろひっついてきたら邪魔ですね。
正規表現をつかったり、sedやawkで整えたりすればできそうですが、
そもそもデータを取り出すのにそこまで考えなくてはならないというのは、
たくさんの処理をしたり考えたりする人間にとっても面倒くさいですね。
ご回答ありがとうございました。
No.4
- 回答日時:
まずはパフォーマンス的な問題です。
数十万件~数百万件のデータになった時単独のテキストファイルでは巨大になり、これを複数のユーザーがgrepで検索することは実質的に困難です。MYSQLなどのRDBMSなら、検索項目に対してインデックスを作成することで高速な検索が可能です。
データの更新・削除については単純なテキストファイルでは、ファイル全体の読み込みと書込になるのでより困難です。
もう一つは、アプリケーションがデータに対して同時実行する際の整合性の担保です。
商品データ、売り先データ、仕入れデータ、売上データなどがあった時に複数のアプリケーションがアクセスした場合、単純なテキストファイルでは整合性を保証できません。やろうとするとファイル全体をロックする必要が出て、同時実行できる処理件数が極めて少なくなってしまいます。
これをトランザクション処理と呼んでます。
>>トランザクション処理
たしかに、復数での書き換えをテキストでは行えませんね。
他にも、パフォーマンスなどからテキストベースで行うと非常に非効率かつ非現実的だったのですかね。
ご回答ありがとうございました。
No.2
- 回答日時:
私がデータベースシステムに最も魅力を感じるのは、
1.データベースに同時アクセス出来ること
2.リレーションシップを組むことが出きること
の2点でしょうか。
1.同時アクセス
厳密には、1つのデータベースの1つのレコードには同時アクセスできませんが、別レコードには同時アクセスできます。
残念ながら、テキストベースのデータベースとgrep、sed、sort、tail、head、・・・などでは、同時アクセスするとデータベースの整合性が失われる恐れがあります。
**例**
ユーザAがソートをかけているときに、ユーザBがデータを書き換えたときの動作はどうなるのでしょうか?
2.リレーションシップ
第3正規化を行った場合のデータベースの関係をテキストデータベースだと実現しにくいと思います。
例は、複雑になりすぎるので、ギブアップです。
「第3正規化」でググッてみてください。
テキストデータ+UNIXテキストツール だけだと厳しいと解ってもらえると思います。
さすがに、awkやperlを使えば何でもアリでしょうが・・・。
なるほど。
同時アクセスや、第3正規化?などの、
既存のツールでは実現の難しいさまざまな作業を
それぞれ実行することができるから導入するのですね。
そう考えるとそういった作業を一括してまとめ上げているという意味で、
#1さんのおっしゃるOSとおなじ存在理由というのがよりよく分かったような気がします。
回答ありがとうございました。
No.1
- 回答日時:
DBMSの存在理由はオペレーティングシステムの存在理由と同じです.
オペレーティングシステムの役割を思い出してみてください.
OSの役割と同じといいますと、
データベース管理システムは、
データ管理のためのユーザーランドや、新たな子システムのためのインターフェイスを提供していて、
データ管理にかかわる様々な作業?を束ねている。
ということでしょうか?
となると、データベース管理システムは、データ管理の親玉で、
データ管理のすべてがここを基礎に考えれば済むようになるために導入するってことですかね。
分かったような分からないような。
寡聞なもので、すいません。
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
- フリーソフト 色々な形式の個人情報を後で参照しやすいようWindow10で管理したいのですが、どんな方法があるの? 1 2023/04/29 16:46
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL MySQLでcreateが使えない MySQLを使ってデータベースを作ろうと思い、CREATE を使 3 2022/06/19 15:32
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
- その他(ビジネス・キャリア) 勤怠管理について(備えておくべきもの) 3 2022/09/08 10:51
- MySQL 「掲示板のログイン画面」はPHP~MySQLに「データベース認証のシステム」方式です。 1 2022/09/27 05:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
型 varchar から型 numeric へ...
-
ACCESSで条件付き書式の設定方法
-
エクセルのフォームについて(...
-
データベースソフトのTCARDにつ...
-
ハイフン無しの電話番号データ...
-
データのインポートに失敗します。
-
POSTGRESQLにEXC...
-
エクセルの重複データの曖昧検索
-
社内サーバーとデータベース
-
CSVでDLしたデータにダブルクォ...
-
SQLを使いこなしている人が ETL...
-
エクセルでカタログ制作(印刷...
-
【パフォーマンス】ファイル読...
-
リスト形式の表とデータベース...
-
Thunderbirdのインポートの処理...
-
キャッシュとバッファの違いは?
-
DB2 UDBって?
-
ACCESS2019でのエラーメッセージ
-
AndroidからのAccessデータベー...
-
Accessのレポートで「縦書き」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
型 varchar から型 numeric へ...
-
リスト形式の表とデータベース...
-
データベースソフトのTCARDにつ...
-
SQLを使いこなしている人が ETL...
-
エクセルのフォームについて(...
-
エクセルの重複データの曖昧検索
-
オラクルのLONG RAW型のテーブ...
-
ACCESSで条件付き書式の設定方法
-
データのインポートに失敗します。
-
OpenOfficeのBaseでExcelのデー...
-
ハイフン無しの電話番号データ...
-
CSVでDLしたデータにダブルクォ...
-
カンマ区切りで格納するカラム...
-
【ACCESS】複数のパソコンから...
-
ODBCを使わないでExcelへ連携
-
ACCESSではどの程度の規...
-
DBとテキストファイルの比較
-
データ.mydファイルのテキス...
-
【パフォーマンス】ファイル読...
-
別のACCESSデータベースのテー...
おすすめ情報