Реляционная база данных наследования SQL Oracle - PullRequest
4 голосов
/ 25 ноября 2011

Вот изображение:

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

Вот как далеко я углубился в кодирование:

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
);
/

Это создает людей, разделяющих егов наследство Продавца и Заявителя.

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
);
/

Это тип встречи, ссылки работают для их связывания.

Для создания таблицы:

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);

Такжевот некоторый код того, что я сделал, теперь я задаю свой вопрос:

Как наследование работает с выполнением 1 ко многим непосредственно в Назначение?

Я действительно смущен этим.Кто-нибудь может мне помочь, как это сделать?

1 Ответ

1 голос
/ 08 декабря 2011

Фух, думаю, я наконец понял, что тебя беспокоит ...

В настоящее время назначения REFd в Applicant_table и salesperson_table полностью независимы. Это означает, что заявители могут приходить на встречи с продавцами, которые на самом деле встречаются с кем-то еще:)

Конечно, вы хотите, чтобы все встречи были сохранены в файле назначения.

Это идеальный вариант использования для просмотра объектов. Вам не нужны эти таблицы объектов вообще. Реляционные таблицы намного проще в управлении.

Просто создайте обычные таблицы и затем представления объектов, как этот для 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
 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...