Oracle Veritabanında Namespace Kavramı

2015-11-10 11:59:14


Veritabanında iki nesnenin aynı isimde olup olamayacağını içinde bulundukları namespace belirler. Örneğin; bir tablo ile bir view ya da bir tablo ile bir index aynı isimde olabilir mi ? Aynı isimde iki farklı nesne biraz kafa karıştırıcı olsa da, farklı türdeki bazı nesneler aynı isimlere sahip olabiliyorlar. İki nesnenin aynı isme sahip olması da ancak bu iki nesnenin farklı namespace'de yer almasıyla mümkün oluyor. C++, C# gibi dillerden de namespace kavramını biliyor olabilirsiniz. Orada da farklı namespace'de yer alan iki sınıf aynı isme sahip olabiliyordu. 

Örnek olması açısından aynı isimde bir tablo ile bir sequence oluşturmayı deneyelim. 


CREATE TABLE CIHAZ(ID NUMBER, AD VARCHAR2(20));
CREATE SEQUENCE CIHAZ;

Yukarıdaki SQL komutlarını çalıştırdığımızda CIHAZ isminde bir tablo oluşacaktır (daha önce bu isimde bir nesne olmadığını varsayalım) ancak Create Sequence komutu ORA-00955: name is already used by an existing object hatası verecektir. Çünkü table ve sequence aynı namespace içerisinde yer alır ve aynı isme sahip olamazlar. Bir de aynı isimde index yaratmayı deneyelim.


CREATE UNIQUE INDEX CIHAZ ON CIHAZ(AD);

Yukarıdaki komutu çalıştırdığımızda indexin başarılı bir şekilde yaratıldığını görebiliriz. Çünkü index ve tabloların namespace'leri farklıdır ve bu yüzden aynı isme sahip olabilirler.

Oracle veritabanında table, view, sequence ve private synonymler aynı namespace içerisinde,  index ayrı bir namespace'de, constraintler de ayrı bir namespace içerisindedir. Yani aynı isimde table, index ve constraint yaratılabilir ancak aynı isimde table ve view olamaz.