2011-11-25 56 views
4

这里是一个形象:SQL甲骨文继承关系数据库

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对多直接到预约的继承工作?

我真的很困惑这一点。任何人都可以帮助我如何做到这一点?

+0

你不需要';'**和**的'/'在一个普通的SQL语句。事实上,两者在一起都很糟糕。有关详细信息,请参阅此处:http://stackoverflow.com/a/10207695/330315 –

回答

1

phuh,我想我终于想通什么困扰着你......

目前,约会在applicant_table和salesperson_table是完全独立REFD。这意味着申请人可以与正在与其他人开会的销售人员开会:)

当然,您希望所有约会都存储在appointment_table中。

这是对象视图的完美用例。你根本不需要这些对象表。关系表更容易管理。

只需创建正常的表,然后反对意见,就这样一个店员:

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