【问题标题】:Create Contacts Database Which Refers to Users Without Duplicates创建引用无重复用户的联系人数据库
【发布时间】:2011-12-02 05:18:50
【问题描述】:

我的问题与这个问题相似(但同时完全不同): Contacts Database

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

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

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

【问题讨论】:

    标签: mysql sql database-design


    【解决方案1】:

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

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

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

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

    感谢您的回答。

    【讨论】:

      【解决方案2】:

      类似于链接中的问题。您将有 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>
      

      【讨论】:

        【解决方案3】:

        有两个问题。

        1. "如何选择用户的所有联系人?"

        所以你有一个表 tbl_contacts(user_id, contact_id) 它们都是你的主键,所以你不会得到重复的数据。

        您想列出 user_id = 的所有联系人吗?

        选择 * FROM tbl_contacts WHERE user_id = ?

        1. 您可能想澄清您的第二个问题“另外,如果需要,我如何缩小联系人条目的范围以将其删除?”

        您可能还有一些属于用户联系人的其他属性,您需要使用这些属性进行搜索。(例如:contact_name 或 contact_number)并且当您通过查询获得 1 条记录时,您可以 -> DELETE FROM tbl_contact WHERE contact_id = ?

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-04
          • 2021-12-08
          • 2014-12-26
          • 1970-01-01
          • 2012-04-22
          • 1970-01-01
          相关资源
          最近更新 更多