sql-server – 为什么行使int作为查找表的主键?
发布时间:2021-03-04 18:50:57 所属栏目:编程 来源:网络整理
导读:我想知道为什么我应该行使int作为查找表的主键而不是仅行使查找值作为主键(在大大都环境下它将是一个字符串). 据我所知,行使nvarchar(50)而不是int将行使更多空间,假如它链接到具有很多记录的表. 另一方面,直接行使查找值根基上可以节减我们举办毗连.我可以想
我想知道为什么我应该行使int作为查找表的主键而不是仅行使查找值作为主键(在大大都环境下它将是一个字符串). 据我所知,行使nvarchar(50)而不是int将行使更多空间,假如它链接到具有很多记录的表. 另一方面,直接行使查找值根基上可以节减我们举办毗连.我可以想象,假如老是必要插手,这将是一个很大的节减(我们正在开拓一个Web应用措施,以是这很是重要). 行使int主键(出格是查找表)的利益是什么,而不是“尺度的工作”? 办理要领您的题目的谜底是合乎逻辑的,而不是物理的 – 您查找的代价也许因贸易缘故起因而改变.譬喻,假如您通过电子邮件地点索引客户,那么当电子邮件地点产生变革时会产生什么?显然,这不合用于全部查找表,但在整个应用措施中以沟通方法执行它的甜头是它使您的代码更简朴.假如内部的统统都是整数→整数相关,那么你就被包围了.只需阅读你对Sandy的评述 – 大概在这种环境下你真正想要的是一个Check Constraint,而不是一个外键/查找表,譬喻: create table icecream (flavour varchar(10)) go alter table icecream add constraint ck_flavour check (flavour in ('Orange','Pista','Mango')) go insert into icecream (flavour) values ('Orange') go insert into icecream (flavour) values ('Vanilla') go 运行这个,你获得: (1 row(s) affected) Msg 547,Level 16,State 0,Line 1 The INSERT statement conflicted with the CHECK constraint "ck_flavour". The conflict occurred in database "GAIUSDB",table "dbo.icecream",column 'flavour'. The statement has been terminated. 这是一种高效,高机能的要领,但弱点虽然是添加新的味道意味着代码变动.我提议不要在应用措施中执行此操纵 – 由于您必要在毗连到此DB的每个应用措施中执行此操纵,这是最干净的计划,由于只有一个代码路径可用于执行验证. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |