我需要创建一个数据库,其中有3个表,其中一个是FRIENDS,第二个是USERS,第三个是PICTURES。我在用户和朋友之间有一对多的关系。用户和图片表之间存在一对多的关系。我在这里提出了一个问题,标题是为用户配置文件构建一个数据库,但这对lilbit来说很困惑。他们将userid作为外键,但我认为图片ID应该是用户表中的外键。
还有一个问题是,我们可以在一个表中有2个外键,因为我有一对多的用户表与图片和朋友表的关系。对不起,我的数据库不好。我只是需要一些帮助。谢谢
答案 0 :(得分:1)
如果您尝试创建某种Facebook'朋友'功能,那么您需要引用同一个表。例如,您的USERS表可能如下所示:
( userID ,姓名,电子邮件,朋友,)
然后,朋友们可以通过列出他们的相关信息(userID)来引用很多用户的朋友:“23,345,34,34,23”
所有人都在同一领域。您需要写入列表朋友的任何功能都可以使用它与explode()来收集朋友的详细信息。
最后,是的,表中可以有2个外键,你可以拥有你需要的任意数量。
另外,更具可扩展性的是在数据库中包含以下表格。
USERS FRIENDS PICTURES
然后,好友表将列出两个用户之间的关系,如下所示:FRIENDS TABLE
user1 = 34< ---这是引用USERS表中的userID的外键 user2 = 44< ---这是引用USERS表中的userID的外键
答案 1 :(得分:1)
您可以根据需要拥有尽可能多的外围关键字。如果要将多个图片链接到用户,则为PICTURES提供用户ID是有意义的。如果您希望每个用户只有一张图片,您可以给USERS一个pictureid。
你也可以同时做这两件事。如果您想要查看主图片(如肖像图片或头像)并允许PICTURES拥有用户ID,请参阅USERS.pictureid,以便您也可以为每个用户管理一组图片。您还可以为用户提供多个pictureid,例如driverslicencepictureid,avatarpictureid,portraitpictureid等,每个都是PICTURES.pictureid的外键。
您甚至可以考虑将每张图片链接到多个用户的可能性,例如Facebook,它允许每个用户在多张图片中“标记”,但也允许在每张图片中标记多个用户。
在这种情况下,您需要一个表来附加这两个。定义包含用户标识和pictureid的USERSPICTURES交叉表。您可以使用此表来定义用户和图片之间的交叉链接。
正如我之前所说,除了交叉表之外,您仍然可以为每个用户提供特定图片的ID。
同样适用于FRIENDS的课程。每个人都可以成为每个人的朋友。所以在这种情况下,您可以使用FRIENDS表来存储两个USERS之间的关系。给朋友表一个User1Id和一个User2Id,它允许存储两个用户之间的连接(如果这是你想要的)。
答案 2 :(得分:1)
您可以在一个表中使用两个外键,但根据您的描述,您不会。朋友将拥有用户FK,图片将拥有用户FK。这就是FKs。
首先要提出有关您的架构的问题(例如,如果用户是用户的朋友,他们的朋友仍然是用户,那么应该通过友谊等多对多链接表建立友谊),但是根据您的描述,您应该用FK表示,因为您在一个表中没有2个FK。