我正在为一个存储系统设计一个数据库。我所设计的有四个表,商店,库存,产品和客户。下面是我到目前为止的代码:
CREATE TABLE Product(
Product_ID int PRIMARY KEY,
Name VARCHAR(50),
Description VARCHAR(100),
Market_price DECIMAL(4,2)
)
CREATE TABLE Inventory(
Inventory_ID VARCHAR(20),
Product_ID int FOREIGN KEY REFERENCES Product,
Quantity int,
CONSTRAINT Product_Quantity PRIMARY KEY (Inventory_ID,Product_ID)
)
CREATE TABLE Store(
Id int PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
City VARCHAR(50),
State VARCHAR(50),
Inventory_ID int FOREIGN KEY REFERENCES Inventory,
Price_mod DECIMAL(4,2)
);
CREATE TABLE Customer(
Customer_ID VARCHAR(50) PRIMARY KEY,
Name VARCHAR(50),
City VARCHAR(50),
State VARCHAR(5),
Days_loyal int
)
现在这将不起作用,因为现在库存正在尝试使用复合主键,但商店没有Product_ID作为列,所以商店不能使用它作为外键。我对库存表的预期愿景是这样的:
inventory_ID Product_ID Quantity
123 5 9
784 1 5
123 2 3
784 2 5
在这个小示例中,表将存储给定存储中产品的Quantity值。按照这种设置方式,我需要一个组合键,以便唯一地标识任何单行。我遇到的问题是试图通过外键将Inventory表连接到store表,这种方式仍然满足第三种范式。有办法做到这一点吗?我是否需要添加另一列,或者这会破坏规范化?
需要从存储表中删除inventory_id将StoreId添加到Inventory表
StoreId, ProductId, Quantity
通过查询库存表,您将知道它属于哪个商店,它是什么产品以及您的库存有多少