как создать таблицу наследования в oracle - PullRequest
0 голосов
/ 30 марта 2020

есть таблица с именем event, выступающая в роли родителя, дочерние таблицы наследования события - это специальное событие и событие отеля. Я создал типы, как показано ниже, но я не могу понять, как создавать таблицы для этих таблиц в oracle .I упомянули большинство доступных в настоящее время решений в области переполнения стека, git hub et c. Тем не менее, ни одно из этих решений не сработало успешно.

Типы таблиц:

Event_t (
  EventID:char(5),
  EventType:varchar(20),
  VenueName:varchar(50),
  NoOfGuest:number(10)
) NOT FINAL

HotelEvent_t (
  Date:date,
  Price:numbr(8,2)
) UNDER Event_t

SpecialEvent_t (
  BookingDate:date,
  EndDate:date,
  MenuNumber:number(2), 
  Reservation ref Reservation_t
) UNDER event_t

Большое спасибо, и любые предложения будут высоко оценены.

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Создайте свои типы, используя правильный синтаксис:

CREATE TYPE Event_t AS OBJECT(
  EventID   char(5),
  EventType varchar(20),
  VenueName varchar(50),
  NoOfGuest number(10)
) NOT FINAL;

CREATE TYPE HotelEvent_t UNDER Event_t (
  datetime date,                -- Date is a keyword, try to use a different name.
  Price  number(8,2)
);

CREATE TYPE SpecialEvent_t UNDER event_t (
  BookingDate date,
  EndDate     date,
  MenuNumbers NUMBER(2),
  Reservation ref Reservation_t
);

Затем вы можете создать таблицу объектов:

CREATE TABLE Events OF Event_T(
  eventid CONSTRAINT Events__EventID__PK PRIMARY KEY
);

Затем вы можете вставить в нее различные типы:

INSERT INTO EVENTS VALUES(
  HotelEvent_T(
    'H1',
    'HOTEL',
    'Venue1',
    42,
    DATE '0001-02-03' + INTERVAL '04:05:06' HOUR TO SECOND,
    123456.78
  )
);

INSERT INTO EVENTS VALUES(
  SpecialEvent_T(
    'SE1',
    'SPECIAL',
    'Time Travel Convention',
    -1,
    SYSDATE,
    TRUNC(SYSDATE),
    0,
    NULL
  )
);

и извлеките из него данные:

SELECT e.*,
       TREAT( VALUE(e) AS HotelEvent_T ).datetime AS datetime,
       TREAT( VALUE(e) AS HotelEvent_T ).price AS price,
       TREAT( VALUE(e) AS SpecialEvent_T ).bookingdate AS bookingdate,
       TREAT( VALUE(e) AS SpecialEvent_T ).enddate AS enddate,
       TREAT( VALUE(e) AS SpecialEvent_T ).menunumbers AS menunumbers
FROM   Events e;

Какие выходы:

EVENTID | EVENTTYPE | VENUENAME              | NOOFGUEST | DATETIME            |     PRICE | BOOKINGDATE         | ENDDATE             | MENUNUMBERS
:------ | :-------- | :--------------------- | --------: | :------------------ | --------: | :------------------ | :------------------ | ----------:
H1      | HOTEL     | Venue1                 |        42 | 0001-02-03 04:05:06 | 123456.78 | <em>null</em>                | <em>null</em>                |        <em>null</em>
SE1     | SPECIAL   | Time Travel Convention |        -1 | <em>null</em>                |      <em>null</em> | 2020-03-30 21:11:22 | 2020-03-30 00:00:00 |           0

дБ <> Fiddle здесь

0 голосов
/ 30 марта 2020

Типичным способом создания этих таблиц в Oracle будет:

create table event_t (
  event_id char(5) primary key not null,
  event_type varchar2(20),
  venue_mame varchar2(50),
  no_of_guest number(10)
);

create table hotel_event_t (
  event_date date,
  price number(8,2),
  event_id char(5),
  constraint fk1 foreign key (event_id) references event_t (event_id)
);

create table special_event_t (
  booking_date date,
  end_date date,
  menu_number number(2), 
  reservation_id char(5),
  constraint fk2 foreign key (reservation_id) 
    references reservation_t (reservation_id),
  event_id char(5),
  constraint fk3 foreign key (event_id) references event_t (event_id)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...