Удаление всех ссылок из кортежа с использованием Oracle / Access - PullRequest
0 голосов
/ 01 декабря 2009

Я создал простую базу данных с использованием Oracle, которая имеет несколько таблиц и несколько ограничений, я использую Access 2007 для взаимодействия с базой данных.

Моя проблема в том, что у меня есть таблица, которая называется «Клиент», которая содержит несколько полей, в первую очередь первичный ключ с именем CUSTID.

У меня есть еще одна таблица под названием «Порядок», в которой первичный ключ в «Клиенте» используется в качестве внешнего ключа.

Очевидно, что если я пытаюсь удалить клиента, который используется в «Заказе», я получаю сообщение об ошибке при его использовании. Это означает, что я должен удалить конкретный заказ, который ссылается на Клиента, а затем я могу удалить запись Кастоме.

Я знаю, что «каскад» должен удалить все, что с ним связано, мой вопрос: как я могу это сделать из Access? У меня ограниченные знания баз данных, но достаточно, чтобы их создать и т. Д.

Это больше относится к проверке, просто нужно удалить некоторые кортежи, прежде чем я смогу удалить другой.

Это база данных, созданная для Oracle:

--Used to create a "Clean" slate
DROP TABLE ITEM CASCADE CONSTRAINTS;
DROP TABLE CUSTOMER CASCADE CONSTRAINTS;
DROP TABLE CORDER CASCADE CONSTRAINTS;
DROP TABLE FORUM CASCADE CONSTRAINTS;

CREATE TABLE ITEM 
(
ITEMID              NUMBER(4) NOT NULL,
NAME               CHAR(15) NOT NULL,
CATEGORY            CHAR(15) NOT NULL,
PRICE    NUMBER(8) NOT NULL,
CONSTRAINT ITEM_PK PRIMARY KEY (ITEMID)
);


INSERT INTO ITEM VALUES (1000,'CARROT SEEDS','PACKET SEEDS',2.99);
INSERT INTO ITEM VALUES (2250,'ROSES','FLOWERS',5.99);
INSERT INTO ITEM VALUES (3300,'TOMATOES','PACKET SEEDS',2.99);
INSERT INTO ITEM VALUES (4050,'POTATOES','PACKET SEEDS',1.99);


CREATE TABLE CUSTOMER 
(
 CUSTID              NUMBER(4) NOT NULL,
 FNAME               CHAR(10) NOT NULL,
 LNAME               CHAR(10) NOT NULL,
 ADDRESS             CHAR(40) NOT NULL,
 CITY        CHAR(15) NOT NULL,
 PCODE               CHAR(7) NOT NULL,
 CNUMBER             NUMBER(11) NOT NULL,
 CONSTRAINT CUSTOMER_PK PRIMARY KEY (CUSTID)
 );

INSERT INTO CUSTOMER VALUES (1010,'JAMIE','KEELING','149 OLD MANSFIELD ROAD','DERBY','DE214SA',07500966490);
INSERT INTO CUSTOMER VALUES (2020,'HELEN','DARLINGTON','27 MOORPARK AVENUE','ROCHDALE','OL113JQ',07890189802);
INSERT INTO CUSTOMER VALUES (3030,'STEVEN','SEGAL','123 FAKE STREET','OHIO','SE095BG',01559345467);
INSERT INTO CUSTOMER VALUES (4040,'BRUCE','WAYNE','17 LAKEVIEW CRESCENT','CHICAGO','MN432BD',07500966490);


CREATE TABLE CORDER 
(
 ORDERID             NUMBER(4) NOT NULL,
 CUSTID              NUMBER(4) NOT NULL,
 SHIPADD    CHAR(40) NOT NULL,
 SHIPPCODE    CHAR(7) NOT NULL,
 SHIPDATE    DATE,
 ITEMID              NUMBER(4) NOT NULL,
 QUANTITY    NUMBER(3) NOT NULL,
 TOTAL     NUMBER(8) NOT NULL,
 CONSTRAINT ORDER_PK PRIMARY KEY (ORDERID),
 CONSTRAINT FK_CUSTOMER FOREIGN KEY (CUSTID) REFERENCES CUSTOMER(CUSTID),
 CONSTRAINT FK_ITEM FOREIGN KEY (ITEMID) REFERENCES ITEM(ITEMID)
);

 INSERT INTO CORDER VALUES (1000,1010,'149 OLD MANSFIELD ROAD','DE214SA','12-JAN-07',1000,100,100.00);
 INSERT INTO CORDER VALUES (2000,2020,'27 MOORPARK AVENUE','OL113JQ','04-NOV-10',2250,200,100.00);
 INSERT INTO CORDER VALUES (3000,3030,'123 FAKE STREET','SE095BG','30-OCT-08',3300,150,100.00);
 INSERT INTO CORDER VALUES (4000,4040,'17 LAKEVIEW CRESCENT','MN432BD','25-JUL-07',4050,125,100.00);


 CREATE TABLE FORUM
 (
 FORUMID  NUMBER(4) NOT NULL,
 TITLE   CHAR(30) NOT NULL,
 THREADNAME  CHAR(30) NOT NULL,
 POSTER   CHAR(20) NOT NULL,
 POSTDATE  DATE,
 CONSTRAINT FORUM_PK PRIMARY KEY (FORUMID)
 );

 INSERT INTO FORUM VALUES (1001,'GENERAL CHAT','BEGINNER QUESTIONS','JAMIE KEELING', '25-NOV-09');
 INSERT INTO FORUM VALUES (2002,'OFF TOPIC','FAVOURITE BAND','HELEN DARLINGTON', '12-JAN-09');
 INSERT INTO FORUM VALUES (3003,'GENERAL CHAT','WHEN TO HARVEST?','BRUCE WAYNE', '02-NOV-08');
 INSERT INTO FORUM VALUES (4004,'OFF TOPIC','WHERE DO YOU LIVE?','STEVEN SEGAL', '13-JAN-08');

1 Ответ

2 голосов
/ 01 декабря 2009

Стандартный SQL-способ создания внешнего ключа с помощью ON DELETE CASCADE заключается в следующем. Я не знаю, поддерживает ли Access это, но Oracle поддерживает ON DELETE CASCADE.

alter table CORDER
add foreign key FK_CUSTOMER
references CUSTOMER(custid)
on delete cascade

Если вы заново создаете таблицы, вы также можете определить внешние ключи с помощью каскада удаления в операторе создания таблицы. то есть заменить это

CONSTRAINT FK_CUSTOMER FOREIGN KEY (CUSTID) REFERENCES CUSTOMER(CUSTID)

с этим

CONSTRAINT FK_CUSTOMER FOREIGN KEY (CUSTID) REFERENCES CUSTOMER(CUSTID) ON DELETE CASCADE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...