2011-11-25 14 views
4

Voici une image:SQL Oracle héritage Relational Database

http://i.stack.imgur.com/AjHwH.png

C'est jusqu'où j'allé dans le codage:

CREATE TYPE appointment_list_type AS TABLE OF REF appointment_type; 
/

CREATE OR REPLACE TYPE person_type AS OBJECT (
personID NUMBER, 
Surname varchar2(10), 
Forname varchar2(10), 
dateOfBirth date, 
AddressLine1 varchar2(30), 
AddressLine2 varchar2(30), 
Town varchar2(10), 
contacTel1 varchar2(10), 
contacTel2 varchar2(10)) NOT FINAL; 
/

CREATE TYPE applicant_type UNDER person_type(
applicantID NUMBER, 
maxPrice number(7,2), 
desiredArea varchar2(10), 
Attends appointment_list_type 
); 
/

CREATE TYPE salesperson_type UNDER person_type(
salespersonID NUMBER, 
manager varchar2(10), 
Makes appointment_list_type 
); 
/

Cela crée les types de personnes seperating dans l'héritage de Vendeur et demandeur.

CREATE TYPE appointment_type AS OBJECT(
appointmentID NUMBER, 
Appdate date, 
Apptime timestamp, 
appointmentType varchar2(10), 
levelOfInterest varchar2(10), 
offerMade varchar2(10), 
Made_by REF salesperson_type, 
Attends_by REF applicant_type 
); 
/

Ceci est un type de rendez-vous. Les références fonctionnent pour les relier entre elles.

Pour créer la table:

CREATE TABLE person_table OF person_type (
personID PRIMARY KEY NOT NULL) 
NESTED TABLE Attends STORE AS attend_meeting_table; 

CREATE TABLE applicant_table OF applicant_type (
personID PRIMARY KEY NOT NULL) 
NESTED TABLE Attends STORE AS attend_meeting_table; 

CREATE TABLE salesperson_table OF salesperson_type (
personID PRIMARY KEY NOT NULL) 
NESTED TABLE Makes STORE AS makes_meeting_table;  

CREATE TABLE appointment_table OF appointment_type (
appointmentID PRIMARY KEY NOT NULL, 
SCOPE FOR (Made_by) IS person_table, 
SCOPE FOR (Attends_by) IS person_table); 

est également ici un code de ce que je fait, je maintenant voici ma question:

Comment fonctionne l'héritage avec faire 1 à plusieurs directement dans rendez-vous?

Je suis vraiment confus par cela. Quelqu'un peut-il m'aider sur la façon de faire cela?

+0

Vous n'avez pas besoin ',' ** et ** la '/' dans une déclaration régulière SQL. En fait les deux ensemble sont assez mauvais. Pour plus de détails, voir ici: http://stackoverflow.com/a/10207695/330315 –

Répondre

1

phuh, je pense que j'ai finalement compris ce qui est te tracasse ...

Actuellement, les rendez-vous REFD dans applicant_table et salesperson_table sont totalement indépendants. Cela signifie que les candidats peuvent venir à des réunions avec des vendeurs qui sont en réunion avec quelqu'un d'autre :)

Bien sûr, vous voulez que tous les rendez-vous soient stockés dans la table rendez-vous.

C'est le cas d'utilisation parfait pour les vues d'objet. Vous n'avez pas besoin de ces tables d'objets. Les tables relationnelles sont beaucoup plus faciles à gérer.

il suffit de créer des tables normales et objectera vues, comme celui-ci pour SALESPERSON:

create view ov_salesperson as 
(select personID, 
     salespersonID, 
     SALESPERSON_TYPE 
      (personID 
      Surname, 
      Forname, 
      dateOfBirth, 
      AddressLine1, 
      AddressLine2, 
      Town, 
      contacTel1, 
      contacTel2, 
      salespersonID, 
      manager, 
      CAST 
      (MULTISET 
       (Select appointment_type 
         (appointmentID, 
         Appdate, 
         Apptime, 
         appointmentType, 
         levelOfInterest, 
         offerMade, 
         salesperson_id, 
         applicant_id 
         ) 
       From appointment_table A 
       Where A.salesperson_id = S.salesperson_id 
      ) 
       as appointment_list_type 
      ) 
     ) as salesperson_obj 
    from salesperson_table S 
);