我有一个关于租车的数据库。
我创建了一个CarModels表(ModelID为PK)。
我想创建一个与CarModels具有相同主键的第二个表。 此表仅包含我网站上此模型的搜索次数。
因此,假设您访问我的网站,您可以查看包含租用普通汽车的列表。 "最受欢迎的汽车"表
这不是一对一的关系,这是肯定的。 是否有任何SQL代码将两个主键连接在一起?
答案 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:那么你可以开始做一些有趣的数据分析,比如[某些汽车在某些邮政编码或一年中的某些时候更受欢迎吗?],或者[这家公司每年三月都会租三辆车,所以我会在一月份寄给他们一张优惠券。