使用/了解外键

时间:2017-03-16 22:11:25

标签: postgresql

我有两张桌子:

  1. 包含项目ID(主键),项目名称和项目预算的Project_Info表。

  2. 包含项目名称和预测金额的Project_Forecast表

  3. 我的问题是......我应该在Project_Forecast表中引用Project_Info表中的主键吗?我是SQL的新手,所以我可能会误解这个概念,但是这样做会基本上通过项目ID将每个预测金额都反馈给项目吗?如果没有,那么利用这两个表之间的主键/外键有什么更好的方法呢?

2 个答案:

答案 0 :(得分: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
);

答案 1 :(得分:0)

你应该像这样建立你的表,

Project_Info(
 PojectID PK,
 ProjectName,
 ProjectBudget
)

Poject_Forecast(
ForcastID PK,
ProjectID FK,
ForcastAmount
)

您不希望在预测表中包含项目名称的原因是它是项目的属性,如果将项目放在两个表中并且项目管理繁琐,那将是多余的(非标准化的)名称更改。但要回答您的问题,让FK将每个预测与项目联系起来,也不允许为不存在的项目创建预测,或者删除带有预测的项目。换句话说,当您创建外键时,数据库将强制执行参照完整性。

我也相信有些人会提到我是否不会在ProjectForecast表中绝对不需要ForcastID,但这可能是一个好主意。

我希望这能回答你的问题。