我是SQL和DBMS的新手,因此我仍然在学习最佳实践,并探索可能的和不可能的。我在Postgres中设计了一个数据库,它包含6个表:SATELLITE DATA,它有一个带有CROP DATA的外键,它有一个带有FIELDS的FK,它有一个带有FARMS的FK,它有一个MET STATION和MET DATA的外键,它也有一个MET STATION的外键。 (我希望我已经解释好了..)
我假设我可以得到一个输出表,其中包含彼此相距最远的2个表中的信息(卫星数据和MET数据),因为通过PK和FK有一个通过所有其他表的链接..但是我可以'找出SQL来做到这一点。 (我可以设想一个很长的SQL来做它..但如果有可能我希望有更有效的方法..)
我的问题是:是否有SQL可以通过我所做的相同数据库设计以高效的方式执行上述操作?或者我应该重新设计我的数据库,以便每个需要链接的表是直接链接而不是通过多个其他表链接?
提前感谢您的帮助!
答案 0 :(得分:0)
@{
var years = new List<SelectListItem>{
new SelectListItem{ Text="Select Year", Value = "0" , Disabled = true, Selected = true},
};
years.AddRange(Enumerable.Range(1900, 200)
.Select(i => new SelectListItem { Text = i.ToString(), Value = i.ToString() }));
}
@Html.DropDownList("year",
years,
new { @class = "form-control" })
现在您只需要用实际名称(您未提供的名称)替换表/列名称
答案 1 :(得分:0)
查询并不难。它看起来像这样:
select . . .
from met_station ms join
farms f
on ms.farm_id =f.farm_id join
fields fi
on f.field_id = fi.field_id join
crops c
on c.crop_id = f.crop_id join
satellites s
on s.satellite_id = c.satellite_id;
如果我正确理解数据模型,这些都是1-n关系,并且处理连接没有问题。你只需要列出它们。并且,假设连接键是主键(在一个表中),性能应该没问题。
当某些表格为n-m时,您确实遇到了挑战。处理多个此类关系通常涉及在加入之前进行聚合。