表名和列名:PostgreSQL 中的命名約定
在 PostgreSQL 中,表名和列名遵循特定的命名約定。其中一種約定是這些名稱不能以數字字元開頭。此限制由 SQL-92 標準定義(可在 http://en.wikipedia.org/wiki/SQL-92 存取),該標準指定標識符開頭應為簡單的拉丁字母。
雖然此命名約定可能與程式設計中的常見做法不同,這種設計選擇有多種原因。
識別符開始特徵
在 SQL 中,標識符(包括表名和列名)被定義為最多 63 個字元的字串。這些字串必須以拉丁字母或底線開頭,後續字元為字母、數字或底線。
語法歧義
如果允許以表名和列名開頭對於數字字符,解析過程中可能會出現歧義。考慮以下範例:
SELECT 2e2 3.4 FROM ...
在此查詢中,解析器將不確定 2e2 和 3.4 是否表示列名或數位表達式。當標識符以字母開頭時,歧義性就會消除,解析器可以快速正確地識別表達式。
設計一致性
透過強制識別碼以字母開頭的約定,SQL標準保證了解析和執行的一致性。如果允許數字前導字符,則需要額外的規則來區分標識符和數字表達式,這可能會導致複雜的解析演算法並降低可讀性。
雙引號名稱
雖然預設不允許使用數字前導字符,但可以透過將名稱括在雙引號中來使用它們。這將建立一個覆蓋標準命名約定的帶引號的識別碼。例如,表名15909434_user 可以使用雙引號建立:
CREATE TABLE "15909434_user" ( ... )
使用雙引號提供了靈活性,並允許建立以下名稱:不遵守標準約定。但是,需要注意的是,帶有引號的標識符不太清晰,並且可能更容易出錯。
以上是PostgreSQL 表和列命名約定如何避免解析歧義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!