我已创建此表。
CREATE TABLE TourEvent(
TourID VARCHAR(7),
TourName references WineryTours(TourName),
Month CHAR (3),
Day NUMERIC (2),
Year NUMERIC (4),
Fee NUMERIC (4),
PRIMARY KEY(TourID)
);
我正在尝试创建另一个表,将几乎所有的表引用到另一个表中但是我遇到了麻烦
ORA-02270:此列列表没有匹配的唯一键或主键
这是我到目前为止的代码
CREATE TABLE Bookings(
BookingID VARCHAR(7) PRIMARY KEY,
ClientID references Clients(ClientID),
TourID references TourEvent(TourID),
Tour references TourEvent(TourName),
EventMonth references TourEvent(MONTH),
EventDay references TourEvent(DAY),
EventYear references TourEvent(Year),
Fee references TourEvent(Fee),
DateBooked Date
);
阅读外键,它说我只能引用主键,我正在尝试不同的东西,但不知道如何继续。
谢谢
答案 0 :(得分:1)
实际上,您无法将外键添加到非主键字段。
如果你想要外键到TouEvent表中的TourID字段,你需要为它创建一个主键。
答案 1 :(得分:0)
你的方法错了。您只想包含TourId
作为参考。像这样:
CREATE TABLE Bookings (
BookingID VARCHAR2(7) PRIMARY KEY,
ClientID ?? references Clients(ClientID),
TourID VARCHAR2(7) references TourEvent(TourID),
DateBooked Date
);
您可以在查询数据库时使用JOIN
来获取导览的详细信息。
注意:
VARCHAR2()
超过VARCHAR()
。答案 2 :(得分:0)
在TourEvent
表格中,您可以使用一个DAY
列和MONTH
列替换YEAR
,DATE
和TourName
列需要一种数据类型:
CREATE TABLE TourEvent(
TourID VARCHAR2(7) CONSTRAINT TourEvent__TourID__PK PRIMARY KEY,
TourName VARCHAR2(50) CONSTRAINT TourEvent__TourName__FK REFERENCES WineryTours(TourName),
eventdate DATE,
Fee NUMERIC (4)
);
为您的约束命名并使用VARCHAR2
rather than VARCHAR
也是一种好习惯。
然后,您只需要引用主键:
CREATE TABLE Bookings(
BookingID VARCHAR2(7) CONSTRAINT Bookings__ID__PK PRIMARY KEY,
ClientID VARCHAR2(7) CONSTRAINT Bookings__ClientID__FK references Clients(ClientID),
TourID VARCHAR2(7) CONSTRAINT Bookings__TourID__FK references TourEvent(TourID),
DateBooked Date
);
如果您想查找旅游的详细信息,可以使用加入:
SELECT b.*,
t.tourname,
t.eventdate,
t.fee
FROM Bookings b
INNER JOIN
TourEvent t
ON ( b.tourid = t.tourid )