0

假设我希望用户选择一种或多种联系方式(电子邮件、电话、传真等)。如果他们选择其他,那么他们可以输入自己的单一联系方式。将其存储在数据库中的最佳方法是什么?我看到了三种可能性:

  1. 使用一组数据类型列,加上一个“other_contact”varchar 列来存储可选的用户输入值。
  2. 使用多对多和用户输入的列。所以会有一个用户表、一个contact_method 表和一个连接两者的user_contact_method 表。加上一个 user.other_contact varchar 列来存储可选的用户输入值。
  3. 只需使用多对多。设置与 2 相同,但允许用户将条目添加到 contact_method 表。但这意味着我必须添加一列来跟踪“系统”值(用户无法更改或删除这些值,只有这些值显示在下拉列表中)。另外,我必须添加额外的逻辑以允许更改用户输入的值。

对上述有任何意见,还是有更好的解决方案?

4

1 回答 1

0

如果您有一个用户和多种联系方式的可能性,则很可能是一对多的关系。(由于额外的复杂性和查询此类模型的速度变慢,我会尽可能避免多对多。)

users_table 
id INTEGER
name VARCHAR 
etc.

contacts_table
user_id INTEGER -- foreign key on user.id
contact_method ENUM('email', 'phone', 'mail', 'other')
contact_address VARCHAR
etc.
于 2009-07-27T09:05:01.193 回答