Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设计联系人之间关系的mysql数据库?_Mysql_Sql_Database_Database Design - Fatal编程技术网

设计联系人之间关系的mysql数据库?

设计联系人之间关系的mysql数据库?,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我正试图设计一个联系人数据库,但我也想跟踪他们与其他联系人的关系,无论是家人、朋友、,cowokers等。我为联系人创建了一个表,并创建了一个附属机构表来标记关系的类型,但我不确定我的设计是否正确,也不确定这是正常的多对多关系还是某种递归关系。我还想知道我将如何查询,以便能够获得一个联系人的所有关系以及所有联系人的所有关系 Contacts Table CID CFirstName CLastName 1 Roy Saldana 2 Linda Rodriguez

我正试图设计一个联系人数据库,但我也想跟踪他们与其他联系人的关系,无论是家人、朋友、,cowokers等。我为联系人创建了一个表,并创建了一个附属机构表来标记关系的类型,但我不确定我的设计是否正确,也不确定这是正常的多对多关系还是某种递归关系。我还想知道我将如何查询,以便能够获得一个联系人的所有关系以及所有联系人的所有关系

Contacts Table CID CFirstName CLastName 1 Roy Saldana 2 Linda Rodriguez 3 Hector Rodriguez Both CID & C_ID are the same I just thought I couldn't name both columns the same so I gave one a _. Affiliates Table CID AfiliateType C_ID ex: CID is the mother of C_ID 1 2 mother 1 1 son 2 3 husband 2 3 step-father 1 3 wife 3
我知道这不是正确的方法,但我似乎无法通过这部分,我想我需要查询两次名称,或者可能是编程问题而不是设计问题,我完全迷路了。任何帮助都将不胜感激。提前感谢

是的,您需要查询两次名称。一次用于联系人,第二次用于其关联公司:

选择c.FirstName、c.LastName、a.AfiliateType、ac.FirstName作为AffiliateFirstName、ac.LastName作为AffiliateLastName 从触点c向左连接a到c.CID=a.c\U ID a.CID上的左连接触点ac=ac.CID 关键是为Contacts表设置别名,以便第二次将其用作附属联系人

请注意,我没有对此进行测试,因此可能有一个小错误,但我希望它能告诉您这个想法。

-联系人CID的名字是FIRST\u NAME LAST\u NAME。 - 联系人{CID,名字,姓氏} PK{CID} AK{姓,名} -触点CID_1是触点CID_2的AFF_类型。 - 附属机构{CID_1,CID_2,AFF_TYPE} PK{CID_1,CID_2} FK1{CID_1}引用联系人{CID} FK2{CID_2}引用联系人{CID} 检查CID_1 CID_2 联系人FROM_FIRST FROM_LAST是AFF_类型的TO_FIRST TO_LAST

选择b.FIRST\u NAME作为FROM\u FIRST ,b.姓氏自上次起 ,a.AFF_类型 ,c.第一个名称 ,c.姓氏 从附属公司作为 将触点连接为b上的b.cid=a.cid_1 将触点连接为c上的c.cid=a.cid_2 其中a.cid_1=触点id 或a.cid_2=触点id; 一个要考虑的问题是如何处理对称关系,例如 CID_1是CID_2的母亲,并不对称,但CID_1是CID_2的兄弟。 对于对称关系,通常只为CID_1 注:

所有属性列不为空 PK=主键 AK=备用密钥唯一 FK=外键
如果你知道某件事不正确,为什么不改正呢?此外,请集中精力一次只问一个问题。您的表格看起来不错,只是我要将C_ID列命名为AffiliateCID。你写了一条评论来保持它的直截了当,而我在键入这条评论时感到困惑。通常,CID和AffiliateCID将是主键,因此将它们放在彼此旁边。就SELECT语句而言,您需要两个联系人,因此必须从联系人表中选择两次。 SELECT Contacts.FirstName, Contacts.LastName, Afiliates.AfiliateType FROM Contacts INNER JOIN Afiliates ON Contacts.CID = Afiliates.C_ID