نکاتی در مورد نامگذاری اشیا در اوراکل

در این متن به مرور نکاتی در زمینه نامگذاری اشیا در دیتابیس اوراکل می پردازیم.

نکته 1: اشیاهای زیر namespace مختص به خود را دارند و امکان تکرار اسامی در بین این objectها وجود دارد:

Indexe – Constraint –  Cluster – Database trigger – Private database link – Dimension

مثال: با اجرای دستورات زیر، constraint و database link همنامی را ایجاد می کنیم:

SQL> alter table TBL1  add constraint name1 primary key (FILE#);

Table altered

SQL> create database link name1 connect to usef identified by pa using ‘mydb’;

Database link created

همچنین objectهای زیر namespace مشترکی دارند و تکرار اسامی در بین آنها، امکان پذیر نمی باشد:

TableView – SequencePrivate synonym Stand-alone procedure – Stand-alone stored function – Package – Materialized view – User-defined type

مثال: در این مثال می بینید که امکان استفاده از نام مشترک برای view و table وجود ندارد:

SQL> create table v1 as select * from v$datafile;

Table created

SQL> create view v1 as select * from dual;

ORA-00955: name is already used by an existing object

توجه! با توجه به انکه ایندکس و جدول namespace یکسانی ندارند، پس می توان برای آنها از یک نام مشترک استفاده کرد:

SQL>create table myobj as select * from v$datafile;

Table created

SQL>create index myobj on myobj(file#);

Index created

SQL>select p.OWNER,p.OBJECT_NAME,p.OBJECT_TYPE from dba_objects p where p.OBJECT_NAME=’MYOBJ’;

OWNER OBJECT_NAME OBJECT_TYPE
USEF         MYOBJ                     TABLE
USEF         MYOBJ                     INDEX

بعضی از objectهای اوراکل، تحت مالکیت اسکیمای خاصی قرار ندارند مثل role، Profile، Tablespace و … اوراکل از آنها به عنوان nonschema object یاد می کند. این دسته از objectها، که اسامی آنها در قسمت زیر آمده است، namespace مختص به خود را دارند:

User role – Public synonym – Public database link – Tablespace – Profile

مثال: با اجرای دستورات زیر، tablespace و profile همنامی را ایجاد می کنیم:

SQL> create tablespace mytb ;

created

SQL> create profile mytb limit IDLE_TIME unlimited;

created

نکته 2: اسامی objectها به صورت پیش فرض، به صورت حروف بزرگ در دیتادیکشنری ذخیره می شوند و برای ذخیره کردن objectها به صورت حروف کوچک و یا تلفیقی از حروف کوچک و بزرگ، باید از دابل کوتیشن استفاده کرد بنابرین در صورت قرار دادن نام اشیا در ” می توان جداولی همنام و حساس به حروف بزرگ و کوچک ایجاد کرد:

SQL> create table “mytbl” as select * from v$datafile;

Table created

SQL> create table “Mytbl” as select * from v$datafile;

Table created

SQL> create table “MYTBl” as select * from v$datafile;

Table created

SQL> create table mytbl as select * from v$datafile;

Table created

با اجرای این دستورات، چهار جدول با نام mytbl در دیتابیس ایجاد خواهد شد که تفاوت اسامی آنها، در استفاده از حروف بزرگ و کوچک می باشد:

SQL> select owner, table_name table_name from dba_tables where upper(table_name) = ‘MYTBL’ and owner = ‘USEF’;

OWNER TABLE_NAME
USEF         MYTBL
USEF         MYTBl
USEF         Mytbl
USEF         mytbl

برای هرگونه استفاده از این جداول، استفاده از ” اجباری می باشد:

SQL> truncate table mytbl;

Table truncated

SQL> select count(*) from MYTBl;

  COUNT(*)

———-

        0

SQL> select count(*) from “MYTBl”;

   COUNT(*)

———-

       12

نکته 3: تنها در صورت استفاده از دابل کوتیشن(“) می توان از reserved wordهای نظیر table، view، index و … برای نامگذاری objectها استفاده کرد:

SQL> create table table as select * from v$datafile;

ORA-00903: invalid table name

SQL> create table “table” as select * from v$datafile;

Table created

SQL> select table_name,owner from dba_tables where table_name=’table’;

TABLE_NAME     OWNER

———– ———-

table         USEF

البته کلماتی چون DUAL، SEGMENT، ALLOCATE و … جزو  reserved wordها محسوب نخواهند شد:

SQL> create table DUAL as select * from v$datafile;

Table created

SQL> create table SEGMENT as select * from v$datafile;

Table created

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@ www.linkedin.com/in/vahid-usefzadeh-918bb289

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.