首先,我知道这是一个相当主观的问题,但我需要某种形式的正式文件,以帮助我教育我的客户。SQL最佳实践标识值硬编码
背景 - 与数百个表和SP的大型企业应用程序,都规规矩矩地设计了标准化的表格和使用标识列的外键。
我们的客户有几个员工写的用我们的生产DB的复制副本的水晶企业复杂的报表。
我们有表格来存储我将其分类为“系统”基本信息的表格,例如公司位置或公司内的部门列表,用户的标准角色集合,其他对象的状态(打开/关闭等) ),基本上不经常改变的数据。
问题 - 该报告的设计师和金融分析师他们的写作里面用硬编码标识值的查询。这样
SELECT xxx FROM OFFICE WHERE OFFICE_ID = 6
什么我大大简化了这里,但基本上他们都在用它们的程序内这些硬编码int类型。
对于SQL开发人员来说,看到这个会很明显会让你面对facepalm,因为它只是一种内建的本能而没有这样做。
然而,令人惊讶的是我找不到任何文档或甚至最佳实践文章为什么这不应该做。
他们会认为这样做很好,因为值永远不会改变,他们是正确的,在单一系统内,这些值不会改变,但是在多个环境(staging/QA/Dev)中,这些值可以和是完全不同的,它们的报告设计方法不可移植,只能在1个隔离的服务器环境中运行。
是否有任何SQL专家有更深入的信息/文章等,我可以用来帮助教育我的客户为什么他们应该避免这种做法?
好的答案,我同意所有这一点,而且我们确实已经确切地描述了您已经描述的内容即ie。与匹配的Id/Name列对齐。试图让他们明白'SELECT ID从类别WHERE Name ='xxx''到一个变量中,并用它来代替,这是他们只是不明白的东西,因此拒绝,所以我希望有一个可以引导他们的可靠参考从一个大的权威,所以我可以说,不要这样做,因为这个:参考。启动一个新的Azure虚拟机和种子不同的表值和他们的报告崩溃,而我们的应用程序不会,很难得到这一点跨 – n4esa
我明白你的意思是关于这个问题的权威性文章的缺乏。这不是*完全*你的问题,但在这篇文章中也有一些很好的回应:https://stackoverflow.com/questions/2001375/sql-avoiding-hard-coding-or-magic-numbers – Xedni