2017-03-16 37 views
0

我有兩個表:/瞭解外鍵

包含項目ID(主鍵),項目名稱,項目預算
  1. Project_Info表。

  2. 包含項目名稱和預測數額

    Project_Forecast表

我的問題是......我應該指的是主鍵在Project_Info表中Project_Forecast表?我是SQL新手,所以我可能會誤解這個概念,但是這樣做基本上是通過項目ID將每個預測數量返回給項目?如果不是,那麼利用這兩個表之間的主鍵/外鍵的更好方法是什麼?

回答

0

我應該引用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 
); 
+0

謝謝! Project_Forecast表將如何引用項目ID?我明白這是通過外鍵,但在填充表格方面,它是如何做到的? – Max

+0

它的行爲就像一個沒有外鍵的正規表。但是,當你將行添加到'project_forecast'時,如果不是''project_id'',那麼它必須在'project_info'中有一個匹配的行,否則你將會出錯。 – Gab

+0

如果我的答案符合您的需求,我將不勝感激,如果您可以選擇它作爲您的問題的正確答案! – Gab

0

你應該建立這樣的表格,

Project_Info(
PojectID PK, 
ProjectName, 
ProjectBudget 
) 

Poject_Forecast(
ForcastID PK, 
ProjectID FK, 
ForcastAmount 
) 

你不」的原因t想要在預測表中有項目名稱是它是項目的一個屬性,它會是多餘的(非標準化)如果項目名稱發生變化,那麼兩個表格和繁瑣的管理。但要回答您的問題,FK會將每個預測與項目相關聯,並且不允許爲不存在的項目或預測被刪除的項目創建預測。換句話說,當你創建外鍵時,數據庫將強制引用完整性。

另外我敢肯定,有些人會提到,如果我不是你絕對不需要ProjectForecast表中的ForcastID,但它可能是一個好主意。

我希望這能回答你的問題。