所以我对如何在一列中存储电话号码列表有点困惑。以下是要求:
- 用户可以拥有多个电话号码。
- 电话号码必须是唯一的,因此如果用户 A 添加了用户 B 使用的电话号码,则应显示验证错误。
- 如果用户有多个电话号码,则应选择默认电话号码。
- 解决方案必须与 Postgresql 兼容。
我想到了四种可能的解决方案:
- HStore:创建一个
phone_number
存储所有电话号码哈希的字段。例如{1=>"+1-800-123-1234", 2=>"9237492734", "default"=>1}
。在这种情况下,我需要进行大量查询以确保新电话号码是唯一的,例如我需要查询User.where("phone_number @> ('1' => '+1-800-123-1234')")
然后签入 2User.where("phone_number @> ('2' => '+1-800-123-1234')")
... 等等。 - 一个字段中的电话号码数组:
phone_number
将存储逗号分隔的电话号码,例如“+1-800-123-1234,9237492734”。检查现有电话号码很容易User.where("phone_number LIKE '%+1-800-123-1234%'")
,但数据库要花很多时间才能找到它。default_phone
也将被添加到表格中,或者按照惯例将第一个电话号码设为默认号码。 - 将电话号码限制为 3 个(足够了)并创建
phone_number_1
,phone_number_2
和phone_number_3
字段。检查电话号码的唯一性将消耗 3 个查询。也将需要添加default_phone
. - 添加一个新表
phone_numbers
(id:integer, user_id:integer, phone_number:string, default:boolean)并设置与 User 模型的 has_many 关系。这并不是真正的诱惑......为 1 个字段创建一个完整的表。但它具有快速查找功能,并且每个用户都有无限的电话号码。
非常感谢任何想法、提示和建议。