アプリ版:「スタンプのみでお礼する」機能のリリースについて

DBの勉強を始めたばかりで概念的にわからないことがありましたので、ご教授ください。

"データベースオブジェクト"という言葉についてです。

参考書を見ると、「表やビュー表などの、データベースで扱われるオブジェクトのこと」とあります。
このオブジェクトは表でいうとどの部分をさしているのでしょうか?
#インスタンスというのもこのオブジェクトに含まれるという認識でしょうか。。

又、扱われるオブジェクトの種類は、データベースの種類により異なるとあるのですが、
例えば、OracleとPostgresSQLではどのような点が違うのでしょうか?

A 回答 (5件)

> 何をさしてもオブジェクト、というところが非常にネックです。


> テーブルやビューや索引などがデータベースオブジェクト、
> というならば、例えばPostgreSQLにも同様のものがあると思いますし、

索引がオブジェクトだとは言っていません。
「Oracle Databaseの場合……索引もオブジェクト」だと回答しました。


例えば,ある架空のデータベースソフトを仮定します。
このDBソフトでは,表中の属性に索引を定義することができるとします。
そしてこの索引は,表を構成するファイルの中に隠された領域に実装されているとしましょう。
表の中の一部として索引が存在する,となると,表を削除すると同時に索引も消えますよね。であるなら,この索引をオブジェクトと呼ぶのは適切ではありません。

それに対して Oracle Databaseの場合は,表も索引もそれぞれ別物として実装しているのですよね。索引を削除せずに,索引を表から切り離すこともできるし,索引を再び表に紐付けることもできる。表を削除したって,索引は残せる。だからOracleでは,索引はオブジェクトと呼ばれるのが適切なわけです。

 > オブジェクト(object)という英単語は,単位として扱える
 > (ひと固まりとなっている)「物」を表す概念です。


あるDBソフトに索引機能があることと,そのDBソフトで索引がオブジェクトとして実装されていることとは,別の問題です。
    • good
    • 0

ANo1です。


舌足らずな回答で誤解を招いたかもしれません。

>オブジェクトとデータベースオブジェクトは違うものになるのですね。

データベースオブジェクトはオブジェクトの1つです。
データベースソフト(こういう言い方はあまりしないですが)ってオブジェクトがあって、
その下にインスタンスやデータベースというオブジェクトがあって、
データベースの下に表やビューその他いろいろなデータベースオブジェクトといわれる
オブジェクトがあって・・・。
という意味です。
    • good
    • 0

ANo1です。



>インスタンスはデータベースオブジェクトではないんですね。。
>いきなりの認識違いでした。質問してよかったです。
ANo2の人とは違う答えを書きますけど、
ANo2の人のいうオブジェクトであるというのが間違いというわけではないです。
インスタンスは、一般にOOなんかでいうオブジェクトには該当しますが、
Oracleの場合、データベースとインスタンスは関連付けするだけであり、並列の関係なので、
データベースの下の階層になるような「データベースオブジェクト」とは呼ばないです。

>項目名だけが記述されたデータの入っていない空っぽの表のことをイメージのことでいいのでしょうか。
ANo2のかたの書かれている通り、空っぽでもカラッポでなくてもデータベースオブジェクトです。

>「package」がどういう働きをするか理解できていないのですっきりできてないですが、
>データベースオブジェクトは各RDBMSでも大きな違いはないのかな?という認識をもってしまいました。
Oracleの「package」はStoredProcedureの集まりみたいなもの(厳密には違いますが。)
他のデータベースではあまり見かけません。

>データベースオブジェクトは各RDBMSでも大きな違いはないのかな?という認識をもってしまいました
「各RDBMSでも大きな違いはない」というのは間違っていませんが、
それぞれのデータベース独自のデータベースオブジェクトがある
あるいは古いバージョンでは存在しないデータベースオブジェクトがある等の点から、
「扱われるオブジェクトの種類は、データベースの種類により異なる」
と書かずに「各RDBMSで違いはない」と書くと間違いとなってしまいます。
また、RDBMS以外のカード型データベース等の昔あった(今もあるかも)を含めてデータベースと
呼ぶと、結構違いは大きくなります。(外部キーやデータベースリンクがなかったり・・・)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
親身に相談に乗って頂き、大変助かっております。

>データベースの下の階層になるような「データベースオブジェクト」とは呼ばないです。
オブジェクトとデータベースオブジェクトは違うものになるのですね。お恥ずかしいですが、まずそこから認識不足でした。。

データベースオブジェクトはデータベースの種類により異なる、というところで幾分すっきりしました。
ただ、テーブルやビューなど基本的なところに違いがあるのかと思っていたので、外部キーなどがまったく考慮していませんでした。
#外部キーも基本ではあると思いますが

もう各RDBMSの細かな特徴をつかめるようにもう少し勉強してみます。
取り急ぎで大変失礼ですが、勉強不足ゆえ、もう少し理解を深めてから再度質問させていただきます。
ありがとうございました。

お礼日時:2011/07/17 23:13

オブジェクト(object)という英単語は,単位として扱える(ひと固まりとなっている)「物」を表す概念です。

ですから基本的に,何を指してもオブジェクトと呼ぶことができます。
Oracle Databaseの場合,回答ANo.1のとおり,実表も,ビュー表も,索引も,制約も,すべてオブジェクトです。

 > 項目名だけが記述されたデータの入っていない
 > 空っぽの表のことをイメージのことでいいのでしょうか。

データが格納されていてもオブジェクト,空っぽでもオブジェクトです。

----------------
インスタンスもオブジェクトですよ。
社員表,部門表のような生成された個々の実体をインスタンスと呼びます。そしてそれらは表ですからオブジェクトと呼んでもかまいません。

ただ,Oracleの場合,インスタンスという用語がもっとも頻繁に登場するのは,上記のような一般的なオブジェクト指向用語としてのインスタンスではなく,もっぱら「Oracleインスタンス」すなわち「Oracle自体のインスタンス」という用法で用いられます。
Oracleが起動した後,Oracleプログラム内で扱われる各表,各ビュー表,各索引,各制約をインスタンスとはあまり呼ばず,
Oracleでは,サーバ上で起動される個々のOracleプログラムをインスタンスと呼ぶということです。「サーバ上で複数のOracleインスタンスを起動する」というような用法です。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。

>「Oracle自体のインスタンス」という用法で用いられます。
このOracle自体のインスタンスというのはメモリ上に配置されるデータベースバッファキャッシュや、バックグラウンドプロセスの総称のことですね。
では今後Oracleで出てくるインスタンスは上記認識で覚えておくことにします。
#総称。。という言い方があっているかどうかはちょっと良くわかっていませんが

何をさしてもオブジェクト、というところが非常にネックです。
テーブルやビューや索引などがデータベースオブジェクト、というならば、例えばPostgreSQLにも同様のものがあると思いますし、各RDBMSのデータベースオブジェクトに大きな違いがあるようにはぱっとみて思えないですね。。
#関数とかに違いがあるんでしょうか

お礼日時:2011/07/17 22:48

>「表やビュー表などの、データベースで扱われるオブジェクトのこと」とあります。


>このオブジェクトは表でいうとどの部分をさしているのでしょうか?
データベースで扱われるオブジェクトのことなので、
表でいうと表のことです。他に、インデックスが作ってあれば、インデックスもそうですし、
制約があれば制約もそうです。
あるいは、ストアドプロシジャやトリガーなんかも含まれます。

データベース上で作れるもの、但し、実際のテーブルの中にいれたデータ以外、
と思ってもらうといいかと思います。
## DDLとDMLの違いを分かっておられるなら、DDLで作るものといったらいいかな。
だから、
>#インスタンスというのもこのオブジェクトに含まれるという認識でしょうか。。
インスタンスははいりません。

>扱われるオブジェクトの種類は、データベースの種類により異なるとあるのですが、
>例えば、OracleとPostgresSQLではどのような点が違うのでしょうか?

Oracleにはpackageがあるけど、PostgreSQLやSQL Serverには、ない。
とかかな。(最新バージョンになるとあるのかもしれませんけど)
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。

インスタンスはデータベースオブジェクトではないんですね。。
いきなりの認識違いでした。質問してよかったです。

>データベース上で作れるもの、但し、実際のテーブルの中にいれたデータ以外、
>と思ってもらうといいかと思います。
>## DDLとDMLの違いを分かっておられるなら、DDLで作るものといったらいいかな。
DDLはデータベースを作成したり、ビューを作成するなどの表の根本を作るSQL文のことですね。
とすると、項目名だけが記述されたデータの入っていない空っぽの表のことをイメージのことでいいのでしょうか。

>Oracleにはpackageがあるけど、PostgreSQLやSQL Serverには、ない。
>とかかな。(最新バージョンになるとあるのかもしれませんけど)
「package」がどういう働きをするか理解できていないのですっきりできてないですが、
データベースオブジェクトは各RDBMSでも大きな違いはないのかな?という認識をもってしまいました。
#間違っていたら意図が伝わっておらず、すいません

お礼日時:2011/07/17 09:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す