![](/img/trans.png)
[英]Sharing composite foreign key based on the same columns across multiple tables in MS SQL Server
[英]Creating a foreign key against a composite key in MS SQL Server
我正在嘗試在兩個表之間創建一個外鍵。 問題是其中一個表有一個復合主鍵..
我的表是產品(每個產品一行)和 product_price_history(每個產品多行)。 我在 product_price_history 中有一個復合鍵,它是產品 ID 和該產品特定價格的開始日期。
這是我的代碼:
CREATE TABLE products (
product_id INT IDENTITY(1,1) PRIMARY KEY,
product_name VARCHAR(50) NOT NULL,
product_desc VARCHAR(255) NULL,
product_group_id INT
)
CREATE TABLE product_price_history (
product_id INT NOT NULL,
start_date DATE NOT NULL,
end_date DATE NULL,
price NUMERIC (6,2) NOT NULL
)
ALTER TABLE product_price_history
ADD CONSTRAINT pk_product_id_start_dt
PRIMARY KEY (product_id,start_date)
現在我正在嘗試在 products 表和 product_price_history 表之間創建一個外鍵,但我不能,因為它是一個復合鍵。
此外,將開始日期(外鍵的另一部分)添加到產品表中也沒有任何意義。
處理這個問題的最佳方法是什么? 我可以在這些表之間創建外鍵嗎? 我什至需要外鍵嗎?
我的意圖是
product_price_history
表上的外鍵應該只包含product_id
。 您的目標是確保任何條目product_price_history
在products
中已經有“父”條目。 這與start_date
無關。
我看到這種情況的方式,理論上,表的完全規范化版本必須將current_price
作為products
表中的唯一值。 product_price_history
只是一個日志表。
沒有必要以這種方式使用物理字段,但從這個角度思考有助於了解您的表 model 在哪里稍微去規范化。
此外,如果您制作product_price_history
表而不是簡單的日志表,您如何確保新的start_date
比以前的end_date
更新? 您甚至不能將其表示為主鍵。 如果您稍后編輯start_date
會怎樣? 我什至會考慮為product_price_history
表創建不同的復合鍵。 也許product_id
+ insert_date
或僅自動遞增id
,同時仍保持與products.product_id
的外鍵關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.