Best-Practices

“常數表” - 這是常見的做法嗎?

  • March 28, 2012

大學 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 對每個人來說硬編碼的同一個“家鄉”似乎是一個荒謬的要求。

引用自:https://dba.stackexchange.com/questions/15619