2017-04-05 22 views
2

我們正在切換從.NET到Node和PostgreSQL的新項目。我們應該如何命名或映射Postgres中的SQL表到Node?

由於Postgres的最佳實踐似乎不依賴大寫,所以我們將數據庫列命名爲with_underscores_to_separate_words,而不是像MSSQL和Linq那樣使用UsingPascalCase。

會最佳實踐是:

  1. 要在查詢所有列駝峯地圖? (單調乏味 - 這就是我們現在所做的,有多行,如「member_id as memberID」或「obj.memberID = dbObj.member_id」。)

  2. 要自動映射代碼中的camelCase變量,用下劃線分隔SQL列?

  3. 只是放棄Postgres的命名,並從數據庫查詢返回我的對象​​在我的代碼中有下劃線分隔? (似乎不可取 - 那麼我們有非DB對象與駱駝和DB用下劃線分離的對象......凌亂。)

真的想使用SQL查詢,而不是一個ORM的,但到目前爲止,這是一個棘手的問題。

回答

1

我們決定與Knex一起自動引用所有列名,所以沒有套管問題。我們使用camelCase和PascalCase命名Postgres,因此數據庫與代碼一致。

缺點是,當針對Postgres運行原始查詢時,我們需要引用列名,這是我們可以接受的。

1

您希望支持哪一個?在#1中映射查詢中的列現在和將來都是很多工作;通過傳遞源代碼和結果對象通過humps或類似的東西來實現自動化可以減少許多不斷的努力,但這是另一步,另一個地方可能會出錯。反對#3的唯一打擊是它有點難看。你可以忍受醜陋 - 關掉任何camelCase lint規則,一段時間後它幾乎不會註冊。

如果你死在套管上,你確實有一些選擇;我知道Sequelize支持camelCase和snake_case if you configure your models appropriately之間的切換,而對於低級別的則需要一箇舊的driver plugin。然而,我會建議你習慣它。

+0

謝謝@dmfay - 通過「習慣它」你指的是什麼?即「標準」案例可能會是什麼 - 全面使用snake_case? –

+0

我的意思是習慣在JavaScript代碼中看到snake_cased列名。 – dmfay

1

我相信這涵蓋了所有要點:pg-promise and case sensitivity in column names

這是最簡單的解決方案 - 對所有列名使用下劃線語法,然後自動將它們轉換爲駱駝案例,如示例所示。

確實想使用SQL查詢而不是ORM,但到目前爲止這是一個棘手的問題。

而這正是你用pg-promise得到的結果。更好的是,您可以很好地組織外部SQL文件中的所有SQL,請參閱Query Filespg-promise-demo


另請參閱 - 事件receive

相關問題