首先,我知道這是一個相當主觀的問題,但我需要某種形式的正式文件,以幫助我教育我的客戶。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