我有兩個表:/瞭解外鍵
包含項目ID(主鍵),項目名稱,項目預算Project_Info表。
- 包含項目名稱和預測數額
Project_Forecast表
我的問題是......我應該指的是主鍵在Project_Info表中Project_Forecast表?我是SQL新手,所以我可能會誤解這個概念,但是這樣做基本上是通過項目ID將每個預測數量返回給項目?如果不是,那麼利用這兩個表之間的主鍵/外鍵的更好方法是什麼?
我有兩個表:/瞭解外鍵
包含項目ID(主鍵),項目名稱,項目預算Project_Info表。
Project_Forecast表
我的問題是......我應該指的是主鍵在Project_Info表中Project_Forecast表?我是SQL新手,所以我可能會誤解這個概念,但是這樣做基本上是通過項目ID將每個預測數量返回給項目?如果不是,那麼利用這兩個表之間的主鍵/外鍵的更好方法是什麼?
我應該引用Project_Forecast表中的Project_Info表中的主鍵嗎?
是
,所以我可能會被誤解的概念,但會做這個通過項目ID基本上是指每個預測量回項目?
這是正確的
下面是表,您描述的基本架構:
CREATE TABLE project_info (
id serial unique, -- project ID
name text,
budget int
);
CREATE TABLE project_forecast (
id serial unique,
project_id int REFERENCES project_info (id),
forecast_budget int
);
你應該建立這樣的表格,
Project_Info(
PojectID PK,
ProjectName,
ProjectBudget
)
Poject_Forecast(
ForcastID PK,
ProjectID FK,
ForcastAmount
)
你不」的原因t想要在預測表中有項目名稱是它是項目的一個屬性,它會是多餘的(非標準化)如果項目名稱發生變化,那麼兩個表格和繁瑣的管理。但要回答您的問題,FK會將每個預測與項目相關聯,並且不允許爲不存在的項目或預測被刪除的項目創建預測。換句話說,當你創建外鍵時,數據庫將強制引用完整性。
另外我敢肯定,有些人會提到,如果我不是你絕對不需要ProjectForecast表中的ForcastID,但它可能是一個好主意。
我希望這能回答你的問題。
謝謝! Project_Forecast表將如何引用項目ID?我明白這是通過外鍵,但在填充表格方面,它是如何做到的? – Max
它的行爲就像一個沒有外鍵的正規表。但是,當你將行添加到'project_forecast'時,如果不是''project_id'',那麼它必須在'project_info'中有一個匹配的行,否則你將會出錯。 – Gab
如果我的答案符合您的需求,我將不勝感激,如果您可以選擇它作爲您的問題的正確答案! – Gab