我找不到任何适用于我的例子的内容,也不知道如何标题。
基本上,我有3张桌子:
Workers
Shop
Warehouse
工人可以在商店或仓库工作,但从不在两者中工作。
我被告知我应该在商店和仓库之间建立一对一的关系,其中将创建一个表(?),这将被称为“WorkingLocation”,它将包含 workingLocationId < / strong>和一个额外的ID,表明它是商店还是仓库。我认为这样的东西:
Worker
workerId
name
workingLocationId
Shop
shopId
name
Warehouse
warehouseId
name
WorkingLocation
workingLocationId
shopOrWarehouseId
shopOrWarehouseId 知道它是商店还是仓库。
我可能会误解1对1的关系是什么,并且可能记错了,但我基本上希望能够分辨出工人在哪里工作,知道他可以在商店或工作仓库,但从不在两者中。
我想知道CREATE TABLE
CREATE TABLE Worker
(
workerId Number(2) PRIMARY KEY NOT NULL,
name Varchar2(25) NOT NULL,
workingLocationId REFERENCES WorkingLocation(workingLocationId) NOT NULL
);
CREATE TABLE Shop
(
shopId Number(2) PRIMARY KEY NOT NULL,
name Varchar2(25) NOT NULL
);
CREATE TABLE Warehouse
(
warehouseId Number(2) PRIMARY KEY NOT NULL,
name Varchar2(25) NOT NULL
);
CREATE TABLE WorkingLocation
(
workingLocationId Number(2) PRIMARY KEY NOT NULL,
shopOrWarehouseId REFERENCES (Shop(shopId), Warehouse(warehouseId)) -- I want to know how to do this, if it is possible
);
这可能吗?如果没有,我怎么能做出类似的东西?
(我的老师告诉我这件事,但是很久以前就已经很久了,因为我不得不为考试而学习,我忘记了它是如何运作的,我相信他告诉它会知道它是否重复它就像有两张桌子或其他东西)
我正在使用sql developer
答案 0 :(得分:1)
这是&#34;其中一个&#34;关系。仅举两个例子,两个单独的列可能是最简单的解决方案:
CREATE TABLE Shops (
shopId Number(2) PRIMARY KEY NOT NULL,
name Varchar2(25) NOT NULL
);
CREATE TABLE Warehouses (
warehouseId Number(2) PRIMARY KEY NOT NULL,
name Varchar2(25) NOT NULL
);
CREATE TABLE Workers (
workerId Number(2) PRIMARY KEY NOT NULL,
name Varchar2(25) NOT NULL,
shopId Number(2) references shops(shopId),
warehouseId Number(2) references warehouses(warehouseId),
check ( (shopId is not null and warehouseId is null) or
(shopId is null and warehouseId is not null)
)
);
第四张表并没有真正帮助。