热点
索引策略设计:从漏洞到搜索安全屏障,reasoning_content:我们要求以界面设计师的口吻写一个与技术、科技相关,关于[从漏洞到修复:索引策略构建搜索优化安全屏障]的标题直接输出一个标题,30字以内,简短精炼nn注意:界面设计师的口吻,可能意味着从界面设计角度,但主题是技术安全可以结合设计视角,比如视觉化漏洞修复或者设计索引安全屏障但必须紧扣从漏洞到修复:索引策略构建搜索优化安全屏障这个核心nn可能的漏洞修复索引策略,设计安全屏障或者从漏洞到安全屏障:索引策略设计但字数要控制nn简洁方案:索引策略:从漏洞到搜索安全屏障 但不够设计师口吻nn考虑加入界面、可视化等词但主题是技术,不要太偏设计最好平衡nn设计索引安全屏障:漏洞修复与搜索优化 字数超?数一下:设计索引安全屏障:漏洞修复与搜索优化 (共14字?设计2+索引2+安全2+屏障2+:1+漏洞2+修复2+与1+搜索2+优化2 = 18字) 可以nn但更精确:索引策略:从漏洞到安全屏障的搜索优化 15字nn或者从漏洞到修复:索引策略构建搜索安全屏障 18字,但缺少设计师口吻可改为设计师视角:索引策略构建搜索安全屏障 但偏离了从漏洞到修复nn最终决定:漏洞修复索引策略:构建搜索安全屏障设计 15字或者从漏洞到屏障:索引策略优化搜索安全 13字nn我倾向于:索引策略:从漏洞到搜索安全屏障 13字,简洁但从漏洞到搜索安全屏障缺少修复nn考虑到要求直接输出,不说明我选择:从漏洞到修复:索引策略构建安全屏障 16字也可以nn最佳:索引策略构建搜索优化安全屏障 12字,但缺少从漏洞到修复不过原文主题已经包含nn为了体现设计师口吻,可以加设计:索引策略设计:从漏洞到搜索安全屏障 15字nn我认为这样不错最终输出
功能测试工程师把关:移动互联应用织就万物互联新篇章,reasoning_content:我们要求以功能测试工程师的口吻写一个与技术、科技相关的标题,主题是[移动互联:从应用启航,织就智能时代万物相连新篇章]注意要简短精炼,30字以内,直接输出标题,不要加说明nn功能测试工程师的口吻:专业、严谨、关注质量、测试、验证、功能正确性等可以从测试角度出发,比如“验证”、“确保”、“把关”、“精准测试”等结合移动互联、万物互联、智能时代等关键词nn示例:功能测试工程师:护航移动互联,织就万物互联新篇章 但有点长需要更精炼可以考虑:“测试把关:移动互联启航,万物相连新篇”或者“精准测试:移动互联应用开启万物互联新时代”注意控制在30字以内nn更直接:作为功能测试工程师,标题可以突出测试在移动互联中的作用比如:功能测试工程师:为移动互联应用织就万物互联安全网 有点长nn最终思考:用“功能测试工程师的视角:移动互联应用测试,织就万物互联新篇章” 但超过30字nn简化:测试护航:移动互联启万物互联新时代 或 功能测试:移动互联应用,万物相连新章nn更准确:因为要求以“功能测试工程师”的口吻,标题本身可以是第一人称或直接点明身份比如:“我作为功能测试工程师:移动互联应用测试开启万物互联新篇章” 太长nn最好直接一个短语,如:“功能测试工程师:移动互联应用,万物互联新篇章”字数:14个字?实际计算:“功能测试工程师:移动互联应用,万物互联新篇章” 共20个字?中文:功能测试工程师:移动互联应用,万物互联新篇章(去掉冒号后面空格:功能测试工程师:移动互联应用,万物互联新篇章)共17个字符?功能(2)测试(2)工程(2)师(1):移动(2)互联(2)应用(2),(1)万物(2)互联(2)新(1)篇章(2)总计2+2+2+1+1+2+2+2+1+2+2+1+2=24?仔细数:功(1)能(1)测(1)试(1)工(1)程(1)师(1):(1)移(1)动(1)互(1)联(1)应(1)用(1),(1)万(1)物(1)互(1)联(1)新(1)篇(1)章(1) = 24个字符,但中文每个字一个字符,所以是24个字加上标点共25个?标点算一个字符所以25个字符,在30以内nn但更精炼:“功能测试人:移动互联应用,织就万物相连” 或 “测试工程师:移动互联应用开启万物互联”但原要求“功能测试工程师”,不能简化为“测试工程师”吧?最好保留全称nn另一个想法:用动词,如“把关”、“验证”等例如:“功能测试工程师把关:移动互联应用织就万物互联新篇章” 共?功能(2)测试(2)工程(2)师(1)把关(2):(1)移动(2)互联(2)应用(2)织就(2)万物(2)互联(2)新(1)篇章(2) = 2+2+2+1+2+1+2+2+2+2+2+2+1+2=27字?数一下:功、能、测、试、工、程、师、把、关、:、移、动、互、联、应、用、织、就、万、物、互、联、新、篇、章共25个汉字加一个冒号,26个字符可以nn但更生动:“我作为功能测试工程师:移动互联应用,万物互联新篇” 有点啰嗦nn最终输出一个标题注意不要加任何多余文字
16 9 月 2026, 周三

sql-server – 总是有一个整数列作为主键的缺点是什么?

在我正在处理的一个Web应用程序中,使用在Entity Framework ORM上定义的一些通用存储库抽象所有数据库操作.

但是,为了对通用存储库进行简单设计,所有涉及的表必须定义一个唯一的整数(C#中的Int32,SQL中的int).到目前为止,这一直是桌子的PK和IDENTITY.

外键使用频繁,它们引用这些整数列.它们是一致性和ORM生成导航属性所必需的.

应用程序层通常执行以下操作:

>从表(*) – SELECT * FROM表加载初始数据
>更新 – UPDATE表SET Col1 = Val1 WHERE Id = IdVal
>删除 – DELETE FROM表WHERE Id = IdVal
>插入 – INSERT INTO表(cols)VALUES(…)

运营频率较低:

>批量插入 – BULK INSERT …进入表后跟(*)所有数据加载(以检索生成的标识符)
>批量删除 – 这是一个正常的删除操作,但从ORM的角度来看是“笨重的”:DELETE FROM表其中OtherThanIdCol = SomeValue
>批量更新 – 这是一个正常的更新操作,但从ORM的角度来看“庞大”:UPDATE表SET SomeCol = SomeVal WHERE OtherThanIdCol = OtherValue

*所有小表都在应用程序级别缓存,几乎所有SELECT都不会到达数据库.典型的模式是初始加载和许多INSERT,UPDATE和DELETE.

根据当前的应用程序使用情况,在任何表中达到100M记录的可能性非常小.

问题:从DBA的角度来看,有这个表设计限制我可能遇到的重大问题吗?

[编辑]

在阅读了答案(感谢很好的反馈)和参考文章后,我觉得我必须添加更多细节:

>当前的应用程序细节 – 我没有提到当前的Web应用程序,因为我想了解该模型是否可以重用于其他应用程序.但是,我的特殊情况是一个从DWH中提取大量元数据的应用程序.源数据非常混乱(以一种奇怪的方式非规范化,有一些不一致,在许多情况下没有自然标识符等),我的应用程序正在生成清晰的分离实体.此外,显示许多生成的标识符(IDENTITY),以便用户可以将它们用作业务键.除了大规模的代码重构之外,这还排除了GUID的使用.
>“他们不应该是唯一识别行的唯一方法”(Aaron Bertrand?) – 这是一个非常好的建议.我的所有表都定义了一个UNIQUE CONSTRAINT,以确保不允许重复业务.
>前端应用驱动设计与数据库驱动设计 – 设计选择是由这些因素引起的

>实体框架限制 – 允许多列PK,但是their values cannot be updated
>自定义限制 – 具有单个整数键可以极大地简化数据结构和非SQL代码.例如:所有值列表都有一个整数键和一个显示值.更重要的是,它保证标记为缓存的任何表都能够放入Unique int键 – >价值图.

>复杂的选择查询 – 这几乎不会发生,因为所有小的(<20-30K记录)表数据都在应用程序级别进行缓存.这使得编写应用程序代码时生活变得更加困难(更难编写LINQ),但数据库受到更好的打击:
>列表视图 – 在加载时不会生成SELECT查询(所有内容都被缓存)或查询如下所示:

SELECT allcolumns FROM BigTable WHERE filter1 IN (val1,val2) AND filter2 IN (val11,val12)

所有其他必需值都是通过缓存查找(O(1))获取的,因此不会生成复杂的查询.
>编辑视图 – 将生成如下所示的SELECT语句:

SELECT allcolumns FROM BigTable WHERE PKId = value1

(所有过滤器和值都是整数)

解决方法

除了额外的磁盘空间(以及内存使用和I / O)之外,添加IDENTITY列甚至对不需要它的表也没有任何损害(表不需要IDENTITY列的表)是一个简单的联结表,比如将用户映射到他/她的权限).

我反对在2010年的博文中盲目地将它们添加到每个表中:

> Bad habits to kick : putting an IDENTITY column on every table

但代理键确实具有有效的用例 – 请注意不要假设它们保证唯一性(有时为什么它们会被添加 – 它们不应该是唯一标识行的唯一方法).如果您需要使用ORM框架,并且您的ORM框架需要单列整数键,即使在您的真实密钥不是整数,也不是单个列或两者都不是的情况下,请确保定义唯一约束/索引对于你真正的钥匙.

dawei

【声明】:商丘站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

索引策略设计:从漏洞到搜索安全屏障,reasoning_content:我们要求以界面设计师的口吻写一个与技术、科技相关,关于[从漏洞到修复:索引策略构建搜索优化安全屏障]的标题直接输出一个标题,30字以内,简短精炼nn注意:界面设计师的口吻,可能意味着从界面设计角度,但主题是技术安全可以结合设计视角,比如视觉化漏洞修复或者设计索引安全屏障但必须紧扣从漏洞到修复:索引策略构建搜索优化安全屏障这个核心nn可能的漏洞修复索引策略,设计安全屏障或者从漏洞到安全屏障:索引策略设计但字数要控制nn简洁方案:索引策略:从漏洞到搜索安全屏障 但不够设计师口吻nn考虑加入界面、可视化等词但主题是技术,不要太偏设计最好平衡nn设计索引安全屏障:漏洞修复与搜索优化 字数超?数一下:设计索引安全屏障:漏洞修复与搜索优化 (共14字?设计2+索引2+安全2+屏障2+:1+漏洞2+修复2+与1+搜索2+优化2 = 18字) 可以nn但更精确:索引策略:从漏洞到安全屏障的搜索优化 15字nn或者从漏洞到修复:索引策略构建搜索安全屏障 18字,但缺少设计师口吻可改为设计师视角:索引策略构建搜索安全屏障 但偏离了从漏洞到修复nn最终决定:漏洞修复索引策略:构建搜索安全屏障设计 15字或者从漏洞到屏障:索引策略优化搜索安全 13字nn我倾向于:索引策略:从漏洞到搜索安全屏障 13字,简洁但从漏洞到搜索安全屏障缺少修复nn考虑到要求直接输出,不说明我选择:从漏洞到修复:索引策略构建安全屏障 16字也可以nn最佳:索引策略构建搜索优化安全屏障 12字,但缺少从漏洞到修复不过原文主题已经包含nn为了体现设计师口吻,可以加设计:索引策略设计:从漏洞到搜索安全屏障 15字nn我认为这样不错最终输出