我有两张桌子:
包含项目ID(主键),项目名称和项目预算的Project_Info表。
包含项目名称和预测金额的Project_Forecast表
我的问题是......我应该在Project_Forecast表中引用Project_Info表中的主键吗?我是SQL的新手,所以我可能会误解这个概念,但是这样做会基本上通过项目ID将每个预测金额都反馈给项目吗?如果没有,那么利用这两个表之间的主键/外键有什么更好的方法呢?
答案 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,但这可能是一个好主意。
我希望这能回答你的问题。