JPA - Gelişmiş Eşlemeler

JPA, java spesifikasyonu ile yayınlanan bir kütüphanedir. Bu nedenle, varlık kalıcılığı için tüm nesne yönelimli kavramları destekler. Şimdiye kadar nesne ilişkisel haritalamanın temellerini bitirdik. Bu bölüm sizi nesneler ve ilişkisel varlıklar arasındaki gelişmiş eşlemelere götürür.

Kalıtım Stratejileri

Kalıtım, nesne yönelimli dilin temel kavramıdır, bu nedenle varlıklar arasındaki kalıtım ilişkilerini veya stratejileri kullanabiliriz. JPA, SINGLE_TABLE, JOINED_TABLE ve TABLE_PER_CONCRETE_CLASS gibi üç tür miras stratejisini destekler.

Staff, TeachingStaff, NonTeachingStaff sınıflarını ve bunların ilişkilerini aşağıdaki gibi ele alalım:

Yukarıda gösterilen diyagramda Personel bir varlıktır ve Öğretim Görevlisi ve Eğitim Personeli Olmayan Personel, Personelin alt birimleridir. Burada, kalıtımın her üç stratejisinde de yukarıdaki örneği tartışacağız.

Tek Tablo stratejisi

Tek Tablo stratejisi, tüm sınıf alanlarını (hem süper hem de alt sınıflar) alır ve bunları SINGLE_TABLE stratejisi olarak bilinen tek bir tabloya eşler. Burada ayırt edici değer, bir tablodaki üç varlığın değerlerini farklılaştırmada anahtar rol oynar.

Yukarıdaki örneği ele alalım, TeachingStaff ve NonTeachingStaff, Personel sınıfının alt sınıflarıdır. Kalıtım kavramını hatırlatın (süper sınıfın özelliklerini alt sınıfa göre miras alma mekanizmasıdır) ve bu nedenle sid, sname, hem TeachingStaff hem de NonTeachingStaff'a ait alanlardır. Bir JPA projesi oluşturun. Bu projenin tüm modülleri aşağıdaki gibidir:

Varlıklar Oluşturma

Adlı bir paket oluşturun ‘com.tutorialspoint.eclipselink.entity’ altında ‘src’paketi. Adlı yeni bir java sınıfı oluşturunStaff.javaverilen paket altında. Personel varlık sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.entity;

import java.io.Serializable;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

@Entity
@Table
@Inheritance( strategy = InheritanceType.SINGLE_TABLE )
@DiscriminatorColumn( name = "type" )

public class Staff implements Serializable {
   @Id
   @GeneratedValue( strategy = GenerationType.AUTO )
   
   private int sid;
   private String sname;
   
   public Staff( int sid, String sname ) {
      super( );
      this.sid = sid;
      this.sname = sname;
   }
   
   public Staff( ) {
      super( );
   }
   
   public int getSid( ) {
      return sid;
   }
   
   public void setSid( int sid ) {
      this.sid = sid;
   }
   
   public String getSname( ) {
      return sname;
   }
   
   public void setSname( String sname ) {
      this.sname = sname;
   }
}

Yukarıdaki kodda @DescriminatorColumn alan adını belirtir (type) ve değerleri kalan (Öğretim ve Eğitim Olmayan Personel) alanlarını gösterir.

Adlı Personel sınıfına bir alt sınıf (sınıf) oluşturun TeachingStaff.java altında com.tutorialspoint.eclipselink.entitypaketi. TeachingStaff Varlık sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@DiscriminatorValue( value="TS" )
public class TeachingStaff extends Staff {

   private String qualification;
   private String subjectexpertise;

   public TeachingStaff( int sid, String sname, 
   
   String qualification,String subjectexpertise ) {
      super( sid, sname );
      this.qualification = qualification;
      this.subjectexpertise = subjectexpertise;
   }

   public TeachingStaff( ) {
      super( );
   }

   public String getQualification( ){
      return qualification;
   }

   public void setQualification( String qualification ){
      this.qualification = qualification;
   }

   public String getSubjectexpertise( ) {
      return subjectexpertise;
   }

   public void setSubjectexpertise( String subjectexpertise ){
      this.subjectexpertise = subjectexpertise;
   }
}

Adlı Personel sınıfına bir alt sınıf (sınıf) oluşturun NonTeachingStaff.java altında com.tutorialspoint.eclipselink.entitypaketi. NonTeachingStaff Entity sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@DiscriminatorValue( value = "NS" )

public class NonTeachingStaff extends Staff {
   private String areaexpertise;

   public NonTeachingStaff( int sid, String sname, String areaexpertise ) {
      super( sid, sname );
      this.areaexpertise = areaexpertise;
   }

   public NonTeachingStaff( ) {
      super( );
   }

   public String getAreaexpertise( ) {
      return areaexpertise;
   }

   public void setAreaexpertise( String areaexpertise ){
      this.areaexpertise = areaexpertise;
   }
}

Persistence.xml

Persistence.xml dosyası, veritabanının yapılandırma bilgilerini ve varlık sınıflarının kayıt bilgilerini içerir. Xml dosyası aşağıdaki gibi gösterilir:

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

   <persistence-unit name="Eclipselink_JPA" transaction-type="RESOURCE_LOCAL">
   
      <class>com.tutorialspoint.eclipselink.entity.Staff</class>
      <class>com.tutorialspoint.eclipselink.entity.NonTeachingStaff</class>
      <class>com.tutorialspoint.eclipselink.entity.TeachingStaff</class>
      
      <properties>
         <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpadb"/>
         <property name="javax.persistence.jdbc.user" value="root"/>
         <property name="javax.persistence.jdbc.password" value="root"/>
         <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
         <property name="eclipselink.logging.level" value="FINE"/>
         <property name="eclipselink.ddl-generation" value="create-tables"/>
      </properties>
      
   </persistence-unit>
</persistence>

Hizmet sınıfı

Hizmet sınıfları, iş bileşeninin uygulama kısmıdır. Altında bir paket oluşturun‘src’ paket adı ‘com.tutorialspoint.eclipselink.service’.

Staff, TeachingStaff ve NonTeachingStaff sınıf alanlarını depolamak için verilen paketin altında SaveClient.java adlı bir sınıf oluşturun. SaveClient sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.NonTeachingStaff;
import com.tutorialspoint.eclipselink.entity.TeachingStaff;

public class SaveClient {

   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      //Teaching staff entity 
      TeachingStaff ts1=new TeachingStaff(1,"Gopal","MSc MEd","Maths");
      TeachingStaff ts2=new TeachingStaff(2, "Manisha", "BSc BEd", "English");
      
      //Non-Teaching Staff entity
      NonTeachingStaff nts1=new NonTeachingStaff(3, "Satish", "Accounts");
      NonTeachingStaff nts2=new NonTeachingStaff(4, "Krishna", "Office Admin");

      //storing all entities
      entitymanager.persist(ts1);
      entitymanager.persist(ts2);
      entitymanager.persist(nts1);
      entitymanager.persist(nts2);
      
      entitymanager.getTransaction().commit();
      
      entitymanager.close();
      emfactory.close();
   }
}

Yukarıdaki programı derledikten ve çalıştırdıktan sonra Eclipse IDE'nin konsol panelinde bildirimler alacaksınız. Çıktı için MySQL çalışma tezgahını kontrol edin. Tablo formatında çıktı aşağıdaki gibi gösterilir:

Sid Tür Adı Alan uzmanlığı Vasıf Konu uzmanlığı
1 TS Gopal MSC MED Matematik
2 TS Manisha BSC YATAK ingilizce
3 NS Satish Hesaplar
4 NS Krishna Ofis Yöneticisi

Son olarak, üç sınıfın tüm alanlarını içeren ve adlı ayırıcı sütun ile farklılık gösteren tek bir tablo alacaksınız. ‘Type’ (alan).

Birleştirilmiş tablo Stratejisi

Birleştirilmiş tablo stratejisi, tabloya katılmak ve işlemleri kolaylaştırmak için benzersiz değerler içeren referanslı sütunu paylaşmaktır. Yukarıdaki ile aynı örneği ele alalım.

Bir JPA Projesi oluşturun. Aşağıda gösterilen tüm proje modülleri:

Varlıklar Oluşturma

Adlı bir paket oluşturun ‘com.tutorialspoint.eclipselink.entity’ altında ‘src’paketi. Adlı yeni bir java sınıfı oluşturunStaff.javaverilen paket altında. Personel varlık sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

@Entity
@Table
@Inheritance( strategy = InheritanceType.JOINED )

public class Staff implements Serializable {

   @Id
   @GeneratedValue( strategy = GenerationType.AUTO )
   
   private int sid;
   private String sname;
   
   public Staff( int sid, String sname ) {
      super( );
      this.sid = sid;
      this.sname = sname;
   }
   
   public Staff( ) {
      super( );
   }
   
   public int getSid( ) {
      return sid;
   }
   
   public void setSid( int sid ) {
      this.sid = sid;
   }
   
   public String getSname( ) {
      return sname;
   }
   
   public void setSname( String sname ) {
      this.sname = sname;
   }
}

Adlı Personel sınıfına bir alt sınıf (sınıf) oluşturun TeachingStaff.java altında com.tutorialspoint.eclipselink.entitypaketi. TeachingStaff Varlık sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@PrimaryKeyJoinColumn(referencedColumnName="sid")

public class TeachingStaff extends Staff {
   private String qualification;
   private String subjectexpertise;

   public TeachingStaff( int sid, String sname, 
   
   String qualification,String subjectexpertise ) {
      super( sid, sname );
      this.qualification = qualification;
      this.subjectexpertise = subjectexpertise;
   }

   public TeachingStaff( ) {
      super( );
   }

   public String getQualification( ){
      return qualification;
   }

   public void setQualification( String qualification ){
      this.qualification = qualification;
   }

   public String getSubjectexpertise( ) {
      return subjectexpertise;
   }

   public void setSubjectexpertise( String subjectexpertise ){
      this.subjectexpertise = subjectexpertise;
   }
}

Adlı Personel sınıfına bir alt sınıf (sınıf) oluşturun NonTeachingStaff.java altında com.tutorialspoint.eclipselink.entitypaketi. NonTeachingStaff Entity sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@PrimaryKeyJoinColumn(referencedColumnName="sid")

public class NonTeachingStaff extends Staff {
   private String areaexpertise;

   public NonTeachingStaff( int sid, String sname, String areaexpertise ) {
      super( sid, sname );
      this.areaexpertise = areaexpertise;
   }

   public NonTeachingStaff( ) {
      super( );
   }

   public String getAreaexpertise( ) {
      return areaexpertise;
   }

   public void setAreaexpertise( String areaexpertise ) {
      this.areaexpertise = areaexpertise;
   }
}

Persistence.xml

Persistence.xml dosyası, veritabanının yapılandırma bilgilerini ve varlık sınıflarının kayıt bilgilerini içerir. Xml dosyası aşağıdaki gibi gösterilir:

<?xml version = "1.0" encoding = "UTF-8"?>

<persistence version = "2.0" xmlns = "http://java.sun.com/xml/ns/persistence" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
   
   <persistence-unit name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
      <class>com.tutorialspoint.eclipselink.entity.Staff</class>
      <class>com.tutorialspoint.eclipselink.entity.NonTeachingStaff</class>
      <class>com.tutorialspoint.eclipselink.entity.TeachingStaff</class>
      
      <properties>
         <property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
         <property name = "javax.persistence.jdbc.user" value = "root"/>
         <property name = "javax.persistence.jdbc.password" value = "root"/>
         <property name = "javax.persistence.jdbc.driver" value = "com.mysql.jdbc.Driver"/>
         <property name = "eclipselink.logging.level" value = "FINE"/>
         <property name = "eclipselink.ddl-generation" value = "create-tables"/>
      </properties>
      
   </persistence-unit>
</persistence>

Hizmet sınıfı

Hizmet sınıfları, iş bileşeninin uygulama kısmıdır. Altında bir paket oluşturun‘src’ paket adı ‘com.tutorialspoint.eclipselink.service’.

Staff, TeachingStaff ve NonTeachingStaff sınıf alanlarını depolamak için verilen paketin altında SaveClient.java adlı bir sınıf oluşturun. Ardından SaveClient sınıfı aşağıdaki gibi:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.NonTeachingStaff;
import com.tutorialspoint.eclipselink.entity.TeachingStaff;

public class SaveClient {
   public static void main( String[ ] args ) {
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      //Teaching staff entity 
      TeachingStaff ts1 = new TeachingStaff(1,"Gopal","MSc MEd","Maths");
      TeachingStaff ts2 = new TeachingStaff(2, "Manisha", "BSc BEd", "English");
      
      //Non-Teaching Staff entity
      NonTeachingStaff nts1 = new NonTeachingStaff(3, "Satish", "Accounts");
      NonTeachingStaff nts2 = new NonTeachingStaff(4, "Krishna", "Office Admin");

      //storing all entities
      entitymanager.persist(ts1);
      entitymanager.persist(ts2);
      entitymanager.persist(nts1);
      entitymanager.persist(nts2);

      entitymanager.getTransaction().commit();
      entitymanager.close();
      emfactory.close();
   }
}

Yukarıdaki programı derledikten ve çalıştırdıktan sonra Eclipse IDE'nin konsol panelinde bildirimler alacaksınız. Çıktı için MySQL çalışma tezgahını aşağıdaki gibi kontrol edin:

Burada üç tablo oluşturulur ve sonucu staff tablo biçiminde tablo aşağıdaki gibi gösterilir:

Sid Dtype Adı
1 Öğretim Üyesi Gopal
2 Öğretim Üyesi Manisha
3 Öğretim Üyesi Olmayan Satish
4 Öğretim Üyesi Olmayan Krishna

Sonucu TeachingStaff tablo biçiminde tablo aşağıdaki gibi gösterilir:

Sid Vasıf Konu uzmanlığı
1 MSC MED Matematik
2 BSC YATAK ingilizce

Yukarıdaki tabloda sid yabancı anahtardır (referans alanı formu personel tablosu) NonTeachingStaff tablo biçiminde tablo aşağıdaki gibi gösterilir:

Sid Alan uzmanlığı
3 Hesaplar
4 Ofis Yöneticisi

Son olarak, üç tablo sırasıyla alanları kullanılarak oluşturulur ve SID alanı üç tablonun tümü tarafından paylaşılır. Personel tablosunda SID birincil anahtardır, kalan (TeachingStaff ve NonTeachingStaff) tablolarında SID yabancı anahtardır.

Sınıf stratejisi başına tablo

Sınıf stratejisi başına tablo, her alt varlık için bir tablo oluşturmaktır. Personel tablosu oluşturulacak ancak boş kayıtlar içerecektir. Staff tablosunun alan değerleri, TeachingStaff ve NonTeachingStaff tabloları tarafından paylaşılmalıdır.

Yukarıdaki ile aynı örneği ele alalım. Bu projenin tüm modülleri aşağıdaki şekilde gösterilmektedir:

Varlıklar Oluşturma

Adlı bir paket oluşturun ‘com.tutorialspoint.eclipselink.entity’ altında ‘src’paketi. Adlı yeni bir java sınıfı oluşturunStaff.javaverilen paket altında. Personel varlık sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

@Entity
@Table
@Inheritance( strategy = InheritanceType.TABLE_PER_CLASS )

public class Staff implements Serializable {

   @Id
   @GeneratedValue( strategy = GenerationType.AUTO )

   private int sid;
   private String sname;

   public Staff( int sid, String sname ) {
      super( );
      this.sid = sid;
      this.sname = sname;
   }

   public Staff( ) {
      super( );
   }

   public int getSid( ) {
      return sid;
   }

   public void setSid( int sid ) {
      this.sid = sid;
   }

   public String getSname( ) {
      return sname;
   }

   public void setSname( String sname ) {
      this.sname = sname;
   }
}

Adlı Personel sınıfına bir alt sınıf (sınıf) oluşturun TeachingStaff.java altında com.tutorialspoint.eclipselink.entitypaketi. TeachingStaff Varlık sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
public class TeachingStaff extends Staff {
   private String qualification;
   private String subjectexpertise;

   public TeachingStaff( int sid, String sname, String qualification, String subjectexpertise ) {
      super( sid, sname );
      this.qualification = qualification;
      this.subjectexpertise = subjectexpertise;
   }

   public TeachingStaff( ) {
      super( );
   }

   public String getQualification( ){
      return qualification;
   }
   
   public void setQualification( String qualification ) {
      this.qualification = qualification;
   }

   public String getSubjectexpertise( ) {
      return subjectexpertise;
   }

   public void setSubjectexpertise( String subjectexpertise ){
      this.subjectexpertise = subjectexpertise;
   }
}

Adlı Personel sınıfına bir alt sınıf (sınıf) oluşturun NonTeachingStaff.java altında com.tutorialspoint.eclipselink.entitypaketi. NonTeachingStaff Entity sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
public class NonTeachingStaff extends Staff {
   private String areaexpertise;

   public NonTeachingStaff( int sid, String sname, String areaexpertise ) {
      super( sid, sname );
      this.areaexpertise = areaexpertise;
   }

   public NonTeachingStaff( ) {
      super( );
   }

   public String getAreaexpertise( ) {
      return areaexpertise;
   }

   public void setAreaexpertise( String areaexpertise ) {
      this.areaexpertise = areaexpertise;
   }
}

Persistence.xml

Persistence.xml dosyası, veritabanının yapılandırma bilgilerini ve varlık sınıflarının kayıt bilgilerini içerir. Xml dosyası aşağıdaki gibi gösterilir:

<?xml version="1.0" encoding = "UTF-8"?>
<persistence version = "2.0" xmlns = "http://java.sun.com/xml/ns/persistence"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

   <persistence-unit name = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
      <class>com.tutorialspoint.eclipselink.entity.Staff</class>
      <class>com.tutorialspoint.eclipselink.entity.NonTeachingStaff</class>
      <class>com.tutorialspoint.eclipselink.entity.TeachingStaff</class>
      
      <properties>
         <property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
         <property name = "javax.persistence.jdbc.user" value = "root"/>
         <property name = "javax.persistence.jdbc.password" value = "root"/>
         <property name = "javax.persistence.jdbc.driver" value = "com.mysql.jdbc.Driver"/>
         <property name = "eclipselink.logging.level" value = "FINE"/>
         <property name = "eclipselink.ddl-generation" value="create-tables"/>
      </properties>
      
   </persistence-unit>
</persistence>

Hizmet sınıfı

Hizmet sınıfları, iş bileşeninin uygulama kısmıdır. Altında bir paket oluşturun‘src’ paket adı ‘com.tutorialspoint.eclipselink.service’.

Adlı bir sınıf oluşturun SaveClient.javaStaff, TeachingStaff ve NonTeachingStaff sınıf alanlarını depolamak için verilen paketin altında. SaveClient sınıfı aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.tutorialspoint.eclipselink.entity.NonTeachingStaff;
import com.tutorialspoint.eclipselink.entity.TeachingStaff;

public class SaveClient {
   public static void main( String[ ] args ) {
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      //Teaching staff entity 
      TeachingStaff ts1 = new TeachingStaff(1,"Gopal","MSc MEd","Maths");
      TeachingStaff ts2 = new TeachingStaff(2, "Manisha", "BSc BEd", "English");
      
      //Non-Teaching Staff entity
      NonTeachingStaff nts1 = new NonTeachingStaff(3, "Satish", "Accounts");
      NonTeachingStaff nts2 = new NonTeachingStaff(4, "Krishna", "Office Admin");

      //storing all entities
      entitymanager.persist(ts1);
      entitymanager.persist(ts2);
      entitymanager.persist(nts1);
      entitymanager.persist(nts2);

      entitymanager.getTransaction().commit();
      entitymanager.close();
      emfactory.close();
   }
}

Yukarıdaki programı derledikten ve çalıştırdıktan sonra Eclipse IDE'nin konsol panelinde bildirimler alacaksınız. Çıktı için MySQL çalışma tezgahını aşağıdaki gibi kontrol edin:

Burada üç tablo oluşturulur ve Staff tablo boş kayıtlar içeriyor.

Sonucu TeachingStaff tablo biçiminde aşağıdaki gibi gösterilir:

Sid Vasıf Adı Konu uzmanlığı
1 MSC MED Gopal Matematik
2 BSC YATAK Manisha ingilizce

Yukarıdaki tablo TeachingStaff hem Personel hem de Öğretim Personeli Varlıklarının alanlarını içerir.

Sonucu NonTeachingStaff tablo biçiminde aşağıdaki gibi gösterilir:

Sid Alan uzmanlığı Adı
3 Hesaplar Satish
4 Ofis Yöneticisi Krishna

Yukarıdaki NonTeachingStaff tablosu, hem Staff hem de NonTeachingStaff Varlıklarının alanlarını içerir.