Können Sie so etwas tun?
CREATE TABLE subscription (
custID INT
CONSTRAINT subscription__custid__fk REFERENCES Customer(CustomerId),
name VARCHAR2(50)
CONSTRAINT subscription__mag_name__fk REFERENCES Magazine(Name)
CONSTRAINT subscription__news_name__fk REFERENCES Newspaper(Name),
startdate DATE
CONSTRAINT subscription__startdate__nn NOT NULL,
enddate DATE
);
Ja, Sie können, und Sie werden zwei Fremdschlüssel auf der gleichen Spalte zeigt auf verschiedenen Tabellen haben, aber wenn der Wert in der Spalte nicht null ist, dann wird es erwarten dort sowohl in der ein passender Name sein Zeitschriftentisch und der Zeitungstisch - das ist wahrscheinlich nicht das, wonach Sie suchen.
Können Sie einen Fremdschlüssel haben, der fragt, ob der Wert entweder ausschließlich in dieser Tabelle oder in dieser Tabelle sein darf (aber nicht in beiden)?
Sie können jedoch Ihre Datenbank neu einteilen, sodass Sie die Tabellen für Zeitungen und Zeitschriften in einer einzigen Tabelle zusammenführen (auf die Sie dann leicht verweisen können); so:
CREATE TABLE customer (
CustomerID INT
CONSTRAINT customer__CustomerId__pk PRIMARY KEY,
name VARCHAR2(50)
CONSTRAINT customer__name__nn NOT NULL
);
CREATE TABLE Publications (
id INT
CONSTRAINT publications__id__pk PRIMARY KEY,
name VARCHAR2(50)
CONSTRAINT publications__name__nn NOT NULL,
cost NUMBER(6,2)
CONSTRAINT publications__cost__chk CHECK (cost >= 0),
noofissues INT,
type CHAR(1),
CONSTRAINT publications__type__chk CHECK (type IN ('M', 'N'))
);
CREATE TABLE subscription (
custID INT
CONSTRAINT subscription__custid__fk REFERENCES Customer(CustomerId),
pubID INT
CONSTRAINT subscription__pubid__fk REFERENCES Publications(Id),
startdate DATE
CONSTRAINT subscription__startdate__nn NOT NULL,
enddate DATE
);