使用用户输入的数据实现多对多查找表的最佳方法

时间:2009-07-27 06:36:04

标签: many-to-many lookup-tables

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

  1. 使用set datatype列和一个“other_contact”varchar列来存储可选的用户输入值。
  2. 使用多对多和用户输入的列。因此会有一个用户表,一个contact_method表和一个连接这两者的user_contact_method表。另外还有一个user.other_contact varchar列,用于存储可选的用户输入值。
  3. 只需使用多对多。与2相同的设置,但允许用户向contact_method表添加条目。但这意味着我必须添加一列来跟踪“系统”值(用户不能更改或删除这些值,只有这些值会显示在下拉列表中)。另外,我必须添加额外的逻辑,以允许更改用户输入的值。
  4. 对上述内容有任何意见,还是有更好的解决方案?

1 个答案:

答案 0 :(得分: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.