助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26753
問題を開く
スキーマに関する説明として、正しいものはどれですか。
正解
他のユーザーが所有する表を参照するときには、スキーマ名を接頭辞として参照する
解説
表やビュー等のスキーマ・オブジェクトは必ずいずれかのユーザーに所有されています。スキーマとは、オブジェクトの所有者を表す論理的な概念です。
自分以外のユーザーが所有しているオブジェクトを参照する場合は、オブジェクト名に接頭辞としてスキーマ名をつけて「スキーマ名.オブジェクト名」のように参照しなければなりません。
以上より、
・他のユーザーが所有する表を参照するときには、スキーマ名を接頭辞として参照する
が正解となります。
その他の選択肢については次のとおりです。
・オブジェクトを格納する領域である
オブジェクトを格納する領域を記憶域といいます。記憶域はスキーマ・オブジェクトではありません。
・スキーマが異なっていても、同じ表名は使用できない
表名はスキーマ内で一意でなければなりませんが、異なるスキーマでは同じ表名を使用することができます。
・SELECT文で問合せを行う際に、スキーマを指定しない場合はSYSTEMユーザーの表を参照する
スキーマ名を指定しない場合は、ログインしているユーザーが所有している表を参照します。
自分以外のユーザーが所有しているオブジェクトを参照する場合は、オブジェクト名に接頭辞としてスキーマ名をつけて「スキーマ名.オブジェクト名」のように参照しなければなりません。
以上より、
・他のユーザーが所有する表を参照するときには、スキーマ名を接頭辞として参照する
が正解となります。
その他の選択肢については次のとおりです。
・オブジェクトを格納する領域である
オブジェクトを格納する領域を記憶域といいます。記憶域はスキーマ・オブジェクトではありません。
・スキーマが異なっていても、同じ表名は使用できない
表名はスキーマ内で一意でなければなりませんが、異なるスキーマでは同じ表名を使用することができます。
・SELECT文で問合せを行う際に、スキーマを指定しない場合はSYSTEMユーザーの表を参照する
スキーマ名を指定しない場合は、ログインしているユーザーが所有している表を参照します。
参考
データベースに格納できる表やビューなどを総称してデータベース・オブジェクトと言います。データベース・オブジェクトは必ずいずれかのユーザーに所有されており、スキーマ・オブジェクトとも呼ばれます。
主なスキーマ・オブジェクトは以下のとおりです。
スキーマとは、オブジェクトの所有者を表す論理的な概念です。データベースのユーザーは必ず1つのスキーマを所有し(スキーマ名はユーザー名と同じ名前になります)、ユーザーが作成したオブジェクトは、そのユーザーが所有するスキーマに格納されます。
ユーザーは別のユーザーが所有しているオブジェクトを参照することもできますが、その場合は、
スキーマ名.オブジェクト名
のように、オブジェクト名の前にスキーマ名をつけて、どのスキーマのオブジェクトを参照するのかを指定しなければなりません。
ただし、自分自身が有するオブジェクトを参照する場合には、スキーマ名を省略することができます。スキーマ名を省略した場合は、ログインしているユーザーのスキーマ内のオブジェクトを参照します。
なお、オブジェクト名は以下の命名規則に従う必要があります。
・オブジェクト名は30バイト以下(12c R2以降は128バイト以下)
・使用できる文字は、0~9,A~Z,a~z(日本語環境の場合は漢字,ひらがな,カタカナも使用可)
・使用できる記号は、_,$,#のみ
・オブジェクト名の先頭の文字は、数字,記号以外の文字
・Oracleの予約語は使用できない
この他、アルファベットの大文字と小文字は区別されません。
また、同一スキーマ内では重複するオブジェクト名は使用できません(異なるスキーマでは同じオブジェクト名を使用することができます)。
大文字と小文字を区別したり、スペースを含めるなどネーミング規則に反する列別名を使用する場合は、オブジェクト名を 二重引用符(") で囲まなければなりません。
主なスキーマ・オブジェクトは以下のとおりです。
スキーマとは、オブジェクトの所有者を表す論理的な概念です。データベースのユーザーは必ず1つのスキーマを所有し(スキーマ名はユーザー名と同じ名前になります)、ユーザーが作成したオブジェクトは、そのユーザーが所有するスキーマに格納されます。
ユーザーは別のユーザーが所有しているオブジェクトを参照することもできますが、その場合は、
スキーマ名.オブジェクト名
のように、オブジェクト名の前にスキーマ名をつけて、どのスキーマのオブジェクトを参照するのかを指定しなければなりません。
SQLを表示
connect userA/oracle
SELECT object_name, object_type FROM user_objects;
SELECT object_name, object_type FROM user_objects;
SQLを表示
connect pingt/oracle
SELECT * FROM dummytable;
SELECT * FROM userA.dummytable;
SELECT * FROM dummytable;
SELECT * FROM userA.dummytable;
ただし、自分自身が有するオブジェクトを参照する場合には、スキーマ名を省略することができます。スキーマ名を省略した場合は、ログインしているユーザーのスキーマ内のオブジェクトを参照します。
SQLを表示
connect pingt/oracle
SELECT object_name, object_type FROM user_objects;
SELECT * FROM pingt.departments;
SELECT * FROM departments;
SELECT object_name, object_type FROM user_objects;
SELECT * FROM pingt.departments;
SELECT * FROM departments;
なお、オブジェクト名は以下の命名規則に従う必要があります。
・オブジェクト名は30バイト以下(12c R2以降は128バイト以下)
・使用できる文字は、0~9,A~Z,a~z(日本語環境の場合は漢字,ひらがな,カタカナも使用可)
・使用できる記号は、_,$,#のみ
・オブジェクト名の先頭の文字は、数字,記号以外の文字
・Oracleの予約語は使用できない
この他、アルファベットの大文字と小文字は区別されません。
また、同一スキーマ内では重複するオブジェクト名は使用できません(異なるスキーマでは同じオブジェクト名を使用することができます)。
大文字と小文字を区別したり、スペースを含めるなどネーミング規則に反する列別名を使用する場合は、オブジェクト名を 二重引用符(") で囲まなければなりません。
SQLを表示
SELECT * FROM departments;
CREATE VIEW departments
AS
SELECT * FROM employees;
CREATE VIEW departments
AS
SELECT * FROM employees;
SQLを表示
connect pingt/oracle
SELECT * FROM departments;
SELECT * FROM userA.departments;
SELECT * FROM departments;
SELECT * FROM userA.departments;
選択肢「オブジェクトを格納する領域である」について
投稿日 2024/12/17
前提として解説を読んだ私の認識は以下の通りです。
・スキーマは論理的にオブジェクトを格納する
・物理的にオブジェクトを格納するのは記憶域
・選択肢「オブジェクトを格納する領域である」は物理的な格納場所を意味している
私の考えは間違ってないでしょうか?
私の認識があっているならば、選択肢「オブジェクトを格納する領域である」は
物理的な話とも論理的な話とも受け取れるので、
例えば「~を格納する物理的な領域である」とするのはどうでしょうか?
よろしくお願いします。
r
rink_rew
2024/12/17 21:28
「オブジェクトを格納」はその通りだと思うのですが、「領域」かと問われると、解説にも記載の通りスキーマは「論理的な概念」と捉える方が適切だと思うので、ちょっと違うかなと感じます。
データベースの記憶域として考えれば、表や索引などのオブジェクトが実際に格納されるのはデータファイルということになりますし、スキーマはどちらかといえば、オブジェクトの管理単位のようなものだと理解しています。
とはいえ、黒本などでも「スキーマに格納される」といった表現もありますので、設問の選択肢としてはもう少し具体的な表現となっていた方がスッキリする気がしますね。
コメント
この投稿に対して返信しませんか?
a adachikazuma1851
2024/12/18 15:05
返信ありがとうございます。 個人的には難しい内容の分野で認識不足な所があるかもと思っていたのでスッキリしました。ありがとうございます!