簡體   English   中英

哪個更好:has_one(單列表)還是字符串列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM