我对MySQL很新,我需要一个相对基本的问题的帮助。
假设我有一个自动增量表,按行列出各个人。我在列中包含了每个人的所有基本信息,如姓名,年龄,种族等。但是说我想要列出人民朋友的名单。由于这些列表是动态的,据我所知,你不能在一个表中有两个自动增量变量,因为不存在子表或任何东西,所以不可能在该特定表中包含好友列表。在MySQL中的排序(据我所知)。如果你想要动态的朋友列表,你必须制作一个专门用于此目的的新表。
我对这个想法是对的吗?或者我错过了什么?
这是我目前的一般想法(我不喜欢):
table people_list {
person_id (auto-increment)
name
age
race
...
}
table friends_lists {
friendship_id (auto-increment)
person_id1
person_id2
}
请注意,我刚刚编写了MySQL的语法用于演示。
还有更好的方法吗?
答案 0 :(得分:1)
为什么不
table people_list {
person_id (auto-increment)<
name
age
race
...
}
table person_friend {
person_id(of person)
person_id(of friend)
}
看看this,了解一对多关系。
答案 1 :(得分:1)
你的认可是正确的...除了你的场景中的辅助表(friends_lists
)之外别无他法。这就是如何在两个表之间实现“多对多”关系。
在你的情况下,两个表是相同的(people_list
),但从概念上讲,它们可以被认为是“朋友”和“人”
但是,我可以给你一些关于这种方法的提示吗?
1 - 在某种程度上,每个表都是一个“列表”。那么,为什么后缀“_list”?不,因为同样的原因,我们不使用复数表名(其产品,而不是产品* s *。当然会有很多;)
2 - 不要在朋友处使用自动增量ID,而是将person_id1和person_id2都转换为主键。你摆脱了一个无用的列,这样你就强制每一对人X - 朋友Y都是唯一的。
3 - 根据上下文给出person_id1和2个有意义的名称,例如“person_id”和“friend_id”
总结一下:
table person {
person_id (auto-increment, primary key)
name
age
race
...
}
table friend {
person_id (foreing key from person, primary key)
friend_id (foreing key from person, primary key)
}