- ベストアンサー
データベースの正しい定義は?
初歩的な質問ですが、データベースを正しく定義するとどのようになりますか? SQLとファイルシステムを一緒にしたものがデータベースですか? また、データベースとデータベースエンジンの境界ってどこになりますか? データベースを論じる記事を頻繁に目にしますが、さっぱり分かりません。データベースとオラクル、DB2、あるいは、SQLサーバーなどは必ずしも同じではないと思うのですが.. これらは単なる製品ではないでしょうか。製品の使い方を論じることはデータベースを論じることではないような気がしています。 データベースって何ですか?ご意見をお聞かせください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
データを寄せ集めて整理したファイルを、データベース(以下、DB)と呼んでいる人をネット上でたびたび見かけますが、それはDBの構成要素の一つに過ぎません。 DBを管理するソフト(DBMS)は、以下のような機能を持っています。 (1)データを統合させ、重複データを極力、持たせないようにする。 (2)データの構造変更が、直接、変更部分をアクセスしないアプリケーションには影響を与えない。(データの独立性) (3)複数ユーザから検索、更新などがあっても、データに矛盾を発生させない(排他制御) (4)部分回復、全面回復 アプリケーションの更新を無効にできる。更新したアプリケーションが異常終了しても自動的に回復。システム全体がダウンした場合の回復。 (5)セキュリティ機能 (6)DDL(=データ定義言語)で定義、DML(データ操作言語)で操作できる →リレーショナルDB用の言語は、DDLやDMLを総じて、SQLと呼ぶ。 (7)検索のオプティマイザ (8)再編成 などなど。。。 >データベースを正しく定義するとどのようになりますか? 単に「データベース」というと、DBの実体(ファイル群)を指す場合やDBMSを指す場合があります。 >SQLとファイルシステムを一緒にしたものがデータベースですか? SQLを解析して実行可能にしている部分や、OSのファイルシステムに近い部分は、DBMSを構成する一部分の機能です。 >データベースとデータベースエンジンの境界ってどこになりますか? データベースエンジンとは、SQLを受け付け、DBアクセスを制御し、結果を返す部分でしょうから、DBMSの中核機能ということになると思います。 DBエンジン以外に、DBMSには(オペレータ)コマンド、コンパイラ、ユティリティなどが備わっています。 SQLは国際標準化団体により、標準仕様が提示されています。しかしこれだけでは、「ただのペーパー」であり、その仕様通りに動くソフトウェア(DBMS)を誰かが設計・製造しなければ、誰も使えません。 商用としてリレーショナルDBMS(RDBMS)を開発しているメーカーには、以下のような製品、会社があります。 (1)Oracle・・・オラクル (2)SQL Server・・・マイクロソフト (3)DB2 UDB・・・IBM 国産でも、以下のような製品、会社があります。 (1)Symfoware・・・富士通 (2)HiRDB・・・日立 (3)RIQSII・・・NEC オープンソースとして無料で提供されているRDBMSもあり、代表的なものにMySQLやPostgreSQLなどがあります。 オープンソースは無料で使える反面、以下のようなサポートの問題があります。 (1)トラブルがあった場合のサポートがない →有償契約でサポートを請け負う会社はある (2)不良があった場合にいつ誰が調査、対策するのかが不確定 (3)機能サポートが、いつ誰によりされるのかが不確定 商用RDBMSの場合は、これらが明確です。 各RDBMSは、段階的にSQLに準拠して行っているものが多いですが、標準仕様のSQL内でも未サポートの部分、標準仕様と仕様差がある部分、独自機能があるのが一般的です。 これはSQLの標準仕様が出来上がってから、各メーカーがゼロから開発している訳ではないことやメーカー各々に独自の技術があるからです。
その他の回答 (5)
- chukenkenkou
- ベストアンサー率43% (833/1926)
#5回答者です。 どこから引用したのか分かりませんが、この場合、あなたの言う「集合」と「セット」は、同意語だと思われます。 私は長年、階層型やネットワーク型DBを経験した後、リレーショナル型DB(以下、RDB)担当になった時は、「集合」という言葉に戸惑いました。 RDBでの「カーソルを明示的に使用した操作」を、ご存知ですか? (1)カーソル宣言 DECLARE CR1 CURSOR FOR SELECT * FROM T1 WHERE C1>=:C1BGN AND C1<=:C1END ORDER BY C1 (2)検索条件の変数に値を設定 C1BGN←範囲の最小値 C1END←範囲の最大値 (3)カーソルをオープン OPEN CR1 (4)行データの取り出し →データがなくなるまで繰り返し FETCH CR1 INTO :C1,:C2,:C3 (5)カーソルのクローズ CLOSE CR1 以上のような処理を行います。 RDBMSの種類や検索のソート、グループ化、更新前提などにより違いがありますが、「カーソルのオープン」または「最初のFETCH」時に、検索されるすべての行が決定される場合があります。 つまり検索される行の集合が、この時点で決定されます。 「データベースでオープン?」と違和感がありましたが、「検索結果である『仮想のファイルをオープン』する」というように考えれば、私自身は理解も説明もし易かったです。 SELECT文の実行で複数行の結果を得られるものも、内部的には、PREAPRE→OPEN→FETCHの繰り返し→CLOSEが行われています。 副問い合わせ(サブクエリ)なども、検索結果をアプリケーション側に返すのでなく、内部的に結果の集合をまとめ、他の検索に利用しています。
- O_cyan
- ベストアンサー率59% (745/1260)
>「データの集合」という表現を見かけます データベース自体を取れば整理されたデータの集まりがテーブルであるのでデータの集合です。 >「結果セット」という用語も見かけます。この場合の「集合」と「セット」は同じですか? >結果セットという場合「集合が返される」という意味だと思いますが 結果セットとは私はあまり使いませんがレコードセットはテーブルフィールドのレコードデータやSQL(クエリ)を実行して取得したデータの集まりのことなので同じになります。 >集合という概念を意識しているのでしょうか データベースを構築する際に正規化を行うのでテーブル(テーブルのフィールド)としては意識しますがデータの集合(ただの集まり)としては意識しません。 正規化することによってデータベース(テーブル)のスリム化をしてメンテナンス性を高める事には意識します。 >「集合が返される」・・なんとなくなじめない表現です。どのように理解したらよいのでしょうか? [なじめない表現]これは人それぞれですからね。 必要な複数のテーブルの必要な複数のフィールドを1レコードにセットして処理すると見れば良いのではないでしょうか。 あくまでただのデータの集まりではなくキーによって系統的に配列された(配列した)データという事で。
- dee_honda
- ベストアンサー率53% (26/49)
データベースとは 「複数のアプリケーションソフトまたはユーザによって共有されるデータの集合のこと」 http://e-words.jp/w/E38387E383BCE382BFE38399E383BCE382B9.html もしくは、 「データの集合と、それを管理運用するソフトウェア群の総称」を指すこともあります。 |データベースとデータベースエンジンの境界ってどこになりますか? 話の前後の流次第でニュアンスが異なりますので、一概には言えませんが、 前者の解釈であれば、 データの検索や管理を司るソフトウェアがデータベースエンジンで、 実際のデータがデータベースとなるでしょうし、 後者の解釈ならば、 境界は不明ということになります。 例えば、MicrosoftAccessを例にすると 前者の解釈でのデータベース=MDBファイル データベースエンジン=Jet Jetデータベースを利用したOffice製品=MicrosoftAccess ですが、 「VB6.0でJetを使用してMDBファイルにアクセスしてます」 が前者で、 「VB6.0でAccessのデータベースにアクセスしてます」 というのは後者です。 どちらでも意味が通じると思いますがいかがでしょう? (後者ですとOLEオートメーションでAccessを直接操作するケースも含むかもしれませんが) |データベースを論じる記事を頻繁に目にしますが、 |製品の使い方を論じることはデータベースを論じることではないような気がしています。 論点が製品同士の比較ならば、それはおっしゃるっとおりです。 リレーショナルデータベースの正規化に関することや、 SQL-92の範囲内でのSQL文の書き方 等ならば、 各製品の差異を気にせず議論が可能かもしれませんが、 実際に多い質問は「その製品の特徴」「その製品を使ったプログラミング方法」 だったりするのがsuseimei殿の困惑の元なのかもしれませんけれども、 現場での実践上のニーズなのでしょう。
- O_cyan
- ベストアンサー率59% (745/1260)
>データベースを正しく定義するとどのようになりますか 共有されるデータの集合のこと。大量のデータを処理しやすいように系統的に管理したファイルのこと。管理するソフトがデータベースソフト。 リレーショナルデータベースの定義としては1件のデータを複数の項目(カラムとかフィールド)の集合として表現したデータの集合をテーブルと呼ばれる表で表す方式のこと。 >SQLとファイルシステムを一緒にしたものがデータベースですか? SQLはデータベース操作用言語のこと。ファイルシステムはリレーショナル型やオブジェクト型などの種別になると思いますが。 >データベースとデータベースエンジンの境界ってどこになりますか データベースはデータの集合でデータベースエンジンはそのデータを活用するための部品のようなものという事で良いのではないでしょうか。 >製品の使い方を論じることはデータベースを論じることではないような気がしています。 データベースとOracle・DB2・SQLServerを論じるのは単純に製品の比較でしかないと思います。 SQLServerを長く使っていれば使いやすいと思うだろうしOracleを使っている人はOracleが良いと論じると思います。
補足
トラフィックを抑えるため、個々の回答者の皆様に個別に感謝をいたしませんが、心から感謝いたしております。 「データの集合」という表現を見かけます。また、「結果セット」という用語も見かけます。この場合の「集合」と「セット」は同じですか?また、多くのデータベースエンジニアと呼ばれる人々は、集合という概念を意識しているのでしょうか?結果セットという場合、「集合が返される」という意味だと思いますが、なんとなくなじめない表現です。どのように理解したらよいのでしょうか?たとえば、構造体が返されるとかでしょうか?
- wkwk_koba
- ベストアンサー率15% (3/20)
まずは、検索サイト等で「データベース」について 検索してみましょう。 色んなサイトで紹介・解説しています。 >また、データベースとデータベースエンジンの境界ってどこになりますか? 大きな意味で、「データベース」は、 保持されているデータとその保持しているデータを 管理する為のデータベースエンジンを一緒に言いますが、 データベースエンジンとは、オラクル、DB2・・等 色んな製品があり、そのデータを管理するエンジンが 違います。(独自に開発) 書籍も一杯出ているので、お勉強には困りません。 答えにはなっていないのですが。
補足
> データベースエンジンとは、オラクル、DB2・・等 > 色んな製品があり、そのデータを管理するエンジンが > 違います。(独自に開発) ということは、データベースを使用する、あるいは、データベースを購入するということは、データベースエンジンを使用する、あるいは、データベースエンジンを購入するということでよろしいのでしょうか? よろしくお願いいたします。
お礼
親切なる説明痛み入ります。「カーソル」については、残念ながら理解できる知識がありません。しかし、次の点はなんとなく分かってきました。 「データベースエンジンとは、SQLを受け付け、DBアクセスを制御し、結果を返す部分でしょうから、DBMSの中核機能ということになると思います。」 「DBエンジン以外に、DBMSには(オペレータ)コマンド、コンパイラ、ユティリティなどが備わっています。」 私が目を通した月刊誌などには"コンパイラ"や"ユーティリティ"などの用語は一切登場しませんでした。 chukenkenkou様をはじめとする皆様の回答を印刷しました。貴重なお時間を頂戴し、感謝いたします。 ありがとうございました。