2014-02-21 344 views
0

在我的公司,我們即將開始使用第一個Ruby On Rails應用程序,它將有一個新的數據庫。我們目前的所有數據庫都嚴格符合表格和列的Upper Camel Case命名約定(即MyNiceTable)。我與Ruby On Rails程序員討論過的結論是,對於這個新的應用程序,我們應該切換到我們的數據庫的Snake Case(即my_nice_table)。儘管如此,我從來沒有真正得到過答案,除此之外就是如此。Ruby On Rails數據庫命名公約

我很不舒服,有幾個原因。首先,它不符合我們現有的慣例。其次,這意味着我們正在基於應用程序設計/編程語言選擇進行數據庫設計,我們強烈嘗試避免。最後,第三,以其他語言編寫的其他應用程序將來也很可能會使用這個數據庫,那麼爲什麼我們只是爲了這個應用程序而改變我們的約定呢?對我來說不應該是必要的。我的意思是,如果我們正在使用一個無法更改的現有數據庫呢?

但是我被告知,由於Active Record的工作原理,如果我們使用蛇情況會更容易。我們對ROR很陌生,因此我們也不想讓事情變得更加複雜。

那麼,什麼是真相?除了「這是通常的做法」之外,是否有其他原因,我們需要我們的數據庫使用蛇案而不是上駝案?如果有理由,他們是否可以通過其他方式輕易克服?

謝謝

+0

命名約定只不過是選擇了默認值一些邏輯更。 @KiChjang指出,你可以根據需要忽略它。 – mdesantis

回答

2

You're right when you said Snake Case is the convention。然而,在我提供的參考文獻的同一頁上,它也告訴你how to override the naming conventions。這裏是一個代碼示例,直接從網站:

class Product < ActiveRecord::Base 
    self.table_name = "PRODUCT" 
end 
+0

非常酷,謝謝。偉大的聯繫也。所以,如果你知道答案,那就問一下。比方說,我有一個名爲Products的數據庫表,其中有一個名爲ProductID的主鍵列和另一個名爲ProductName的列。我現在知道我可以使用self.table_name =「Product」和self.primary_key =「ProductID」。 但是,會ROR,瞭解我的ProductName列? – Nullqwerty

+0

我相信你試圖問一個Rails模型是否會識別你的數據庫列?我不太清楚答案,但[this here](http://guides.rubyonrails.org/migrations.html#running-migrations)解釋說您需要使用rake db:migrate: dump「來讓Rails讀取你現有的數據庫模式。在此之後,嘗試發佈[這裏]的建議(http://stackoverflow.com/questions/4119659/rails-3how-to-generate-models-for-existing-database-tables/4120506#4120506)。 –

+0

Rails沒有關於它的問題,但是你不能使用模型getter/setter'record.ColumnName/record.ColumnName =(...)',因爲Ruby會將它們誤認爲是常量。無論如何,您可以使用'send(:ColumnName)/ =(...)','read/write_attribute(:ColumnName)','attribute [:ColumnName]/=()',並根據您的意願創建別名f.e. 'def column_name;發送(爲:ColumnName); end'和'def column_name =(value);發送(:ColumnName =,value);結束' – mdesantis

1

我真的相信,框架只是一個工具,你使用,沒有別的。 Rails是衆所周知的,因爲它的「自以爲是」的做事方式,但我會建議您的公司不扭曲業務或設計決定由於工具。

如果您的公司或技術團隊制定了設計決策,您不應該讓框架與他們混淆,如果確實如此,它不適合您使用。 Rails可以根據命名約定進行自定義,沒有太多麻煩,因此對於您的案例而言,這不是問題。

我總是試圖特別提醒Ruby開發人員(在學習如何使用Ruby編寫代碼之前學會使用Rails的人很多),我們主要是軟件開發人員(或軟件工程師,不管),而不是Rails開發人員,或Sinatra Developers或[把框架名稱放在這裏]開發人員。

這是很好的使用框架的慣例,易於使用,擴展和良好的維護,就像Rails一樣。儘管如此,放棄自己以一種思考整體Web應用程序設計的方式並不好。

無論如何,我找到了一個答案,專門指出要在Rails中更改「snake_case」數據庫約定。我認爲這可能是有益的:

Ruby on Rails: Is it possible to use Camel-cased database field and table names?

+0

偉大的答案謝謝。 – Nullqwerty

+0

謝謝!事實上,看到你寫的那些問題是很好的。它表明仍然有開發人員認爲框架是完成任務的一種方式,而不是「回答所有問題」的東西。 –

+0

嗯,不是真的,關於編程的「概念問題」的地方[程序員堆棧交易所(http://programmers.stackexchange.com/),StackOverflow的是實際問題 – mdesantis