Best-Practices
“常數表” - 這是常見的做法嗎?
大學 SQL 課程,使用 John J. Patrick 的《SQL Fundamentals》一書。在第三章中,他談到了使用“常量表”將列添加到 select 語句中,其中所有行都具有相同的值。
例如,如果您有表“字元”,如下所示:
first_name last_name dept_code ----------- ---------- ------------------- Fred Flintstone ROCKS Barney Rubble ROCKS Wilma Flintstone FACEPALMING_AT_FRED
並且您想要一個 SELECT 將值為“BEDROCK”的列“hometown”添加到所有行,他建議在數據庫中創建第二個表“temp”,使用
hometown -------- BEDROCK
然後做
SELECT first_name, last_name, dept_code, hometown FROM characters, temp
這樣做的目的是避免在 SELECT 語句中放置字元串常量,並且如果您有很多需要相同常量的 SELECT,則更新一個表比更新 50 個查詢更容易。
問題是,過去十五年來我一直在使用 SQL 數據庫,但我從未見過這種結構。它是我剛剛錯過的完全常見的東西,還是在這個任務結束後我可以從記憶中抹去的東西?
Joe Celko 在他的幾本書中提到了常數表。
他建議如果使用一個表,則添加一個檢查約束以確保該表可以包含不超過一行。
CREATE TABLE Constants ( lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'), pi FLOAT DEFAULT 3.142592653 NOT NULL, e FLOAT DEFAULT 2.71828182 NOT NULL, phi FLOAT DEFAULT 1.6180339887 NOT NULL );
或者,視圖可以用於類似目的。
CREATE VIEW Constants AS SELECT * FROM (VALUES(3.142592653, 2.71828182, 1.6180339887)) V(pi,e,phi)
不是我自己用過很多的東西,如果有的話,但總是值得考慮其他可能的技術。
您問題中的特定案例不是我會考慮的常量表。TBH 對每個人來說硬編碼的同一個“家鄉”似乎是一個荒謬的要求。