[英]Is it better to save a string/array in a column rather than having multiple rows in a table ? Which has better performance
[英]Which is better: has_one(single column table) or a string column?
假設我有一個名為cities
(ID,名稱)的表,另一個名為people
(ID,名稱,city_id)的表。
現在,您可以添加任意數量的城市,而沒有任何限制,因此,在這種情況下,最好不要在people
放置“ city
列,而當我想獲得不同的城市時,我可以打電話給DISTINCT
嗎?
我節省的復雜性是否比失去的靈活性好?
我保存的聯接是否比我必須使用的獨特 聯接好?
將city
列設置為索引,是否會和在另一個表中查找ID
一樣快?
我必須說,在我正在處理的應用程序中,我有大約5個這種類型的表,所以它有很多聯接。
如果您所有的用戶都在不同的城市,DISTINCT將可以正常工作。 但是,來自同一城市的人越多,不分離數據的開銷也就越大。 最好的情況是對“城市”列的索引進行一次唯一掃描。
將city列放在people表中還可以減慢對people表的某些訪問請求。
這種復雜性可以保持城市表格的數據質量。 假設可以使用適當的元數據,則可以很容易地驗證已添加的新城市。 允許您清理諸如“紐約”,“紐約”,“紐約”和“紐約”等城市的問題
哪種方法更快的問題實際上取決於應用程序。 如果在訪問個人記錄時始終需要城市,則將城市放入個人記錄可能會更快。 如果您經常需要一個城市列表,那么將它們放在單獨的表格中會更好。
擁有額外的表可能會使您的查詢稍微復雜一些。 但是,您可能會獲得顯着的數據質量。 通過將“城市”列放入人員表中而獲得的靈活性可能會以數據質量為代價。
您的數據庫設計師似乎做得很好。
您始終可以緩存城市表。 如果使用字符串,則會失去面向對象的功能。 假設您要縮寫城市。 或城市has_many郵政編碼...或城市has_many area_codes。 現在,您將痛苦地升級應用程序。
您總是可以做這樣的事情來丟失多余的查詢...
def city_name
Rails.cache.fetch("city-#{city_id}-name", :expires_in => 1.days) do
city.name
end
end
你也應該使用belongs_to而不是has_one
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.