创建指向没有重复项的用户的联系人数据库

时间:2011-12-02 05:18:50

标签: mysql sql database-design

我的问题与此问题类似(但同时完全不同): Contacts Database

问题很简单:如何创建一个联系人数据库表,用于存储用户ID和联系人ID而无需复制密钥。

例如,如果我有一个名为Contacts的表,它将有一个列user_id和一个列contact_id。

一旦我这样做,它应该像插入用户和添加的联系人一样简单。完成后,如何选择所有用户的联系人?另外,如果需要,如何缩小联系人条目以将其删除?

3 个答案:

答案 0 :(得分:1)

我最后只创建了一个包含两个外键的表,然后根据其中一个字段选择它们。

例如(伪代码 - 没有特定语言,只有英文):

Table Contact:
    user = ForeignKey(from user table)
    contact = ForeignKey(from user table)

然后每当我需要他们的东西时,我会检查用户字段是否包含我想要的东西,然后我会检查联系人字段是否有我想要的东西。这样我就不必重复记录了,我仍然可以找到我需要的东西。

感谢您的回答。

答案 1 :(得分:0)

与链接中的问题类似。你会有3张桌子。

表1 User_ID
Name
PK(User_ID)

表2

Contact_id
Address
Phone_Number
等等...
PK(Contact_id)

表3
User_ID
Contact_id
PK(User_ID, Contact_id)
在这里,您将表2中的ContactID作为autoinc列 此外,当在表3中插入时,如果存在重复,MySQL将抛出错误。

要选择所有用户联系人,请使用:

SELECT * 
FROM Table_2 join Table_3 
   ON Table_2.Contact_id = Table_3.contact_id
WHERE Table2.User_id = <userid>

或者,如果您需要特定名称,那么

SELECT * 
FROM Table_1 JOIN Table_2
   ON Table_1.User_id = Table_2.User_id
   JOIN Table_3
     ON Table_2.Contact_id = Table_3.contact_id
WHERE Table1.name = <user name>

答案 2 :(得分:0)

有两个问题。

  1. “如何选择所有用户的联系人?”
  2. 所以你有一个表tbl_contacts(user_id,contact_id)它们都是你的主键,所以你不会得到重复的数据。

    我想列出user_id =?

    的所有联系人

    SELECT * 来自tbl_contacts WHERE user_id =?

    1. 您可能想澄清您的第二个问题“另外,如果需要,如何缩小联系人条目以便删除它?”
    2. 您可能有一些其他属性属于用户的联系人,您需要使用这些属性进行搜索。(例如:contact_name或contact_number),当您有一条查询结果时,您可以 - > ; DELETE FROM tbl_contact WHERE contact_id =?

      如果这不是您想要的答案,请澄清您的问题。