در این متن به مرور نکاتی در زمینه نامگذاری اشیا در دیتابیس اوراکل می پردازیم.
نکته 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 مشترکی دارند و تکرار اسامی در بین آنها، امکان پذیر نمی باشد:
Table – View – Sequence – Private 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