使用另一个表扩展表......排序

时间:2017-09-01 15:54:36

标签: sql sql-server

我有一个关于租车的数据库。

我创建了一个CarModels表(ModelID为PK)。

我想创建一个与CarModels具有相同主键的第二个表。 此表仅包含我网站上此模型的搜索次数

因此,假设您访问我的网站,您可以查看包含租用普通汽车的列表。 "最受欢迎的汽车"表

这不是一对一的关系,这是肯定的。 是否有任何SQL代码将两个主键连接在一起?

3 个答案:

答案 0 :(得分:2)

select m.ModelID, m.Field1, m.Field2,
       t.TimesSearched
from   CarModels m
  left outer join Table2 t on m.ModelID = t.ModelID

但为什么不简单地将TimesSearched字段添加到表CarModels?
然后你不需要另一张桌子

答案 1 :(得分:0)

您没有扩展任何内容(修改表的实际模型)。您只需要使表的INNER JOIN与主键相等即可。

它可能是外部连接,因为它已被建议,但如果它像你说的那样是1:1(第二个表具有完全相同的键 - 我假设所有这些),内部就足够了,因为两个表都具有相同的一套相同的原始键。

作为奖励,如果你没有匹配所有键,它也会产生更少的行,如果你不能匹配所有的PK,那么它就是一个很好的提醒。

话虽如此,你有充分的理由不将这个号码保留在同一张桌子里吗?您基本上是为1个额外列建立1:1关系(按数据类型也是小的)

您可以使用整数的附加属性扩展(现在这是扩展表模型),为您保留该数字。

后者是简单和较低查询时间的首选。

答案 2 :(得分:0)

最简单的方法是在新表上使用带有CarModels表的外键的新主键,如[CarModelID] INT NOT NULL。您可以在FK上放置索引和唯一约束。

如果你真的希望它们是相同的,那么你可以跳过一堆让你的生活地狱的箍,比如从CarModels表创建表,然后将那个字段设置为主键,然后每当你添加一个新的CarModel你必须创建一个SET IDENTITY_INSERT ON的触发器,这样你就可以添加新的触发器,并在完成时记住SET IDENTITY_INSERT OFF

就个人而言,我会创建一个CarsSearched表,让ThisUser在ThisDate上选择ThisCarModel:那么你可以开始做一些有趣的数据分析,比如[某些汽车在某些邮政编码或一年中的某些时候更受欢迎吗?],或者[这家公司每年三月都会租三辆车,所以我会在一月份寄给他们一张优惠券。