如何在数据库PHPMyAdmin中映射两个表
Posted
技术标签:
【中文标题】如何在数据库PHPMyAdmin中映射两个表【英文标题】:How to map two tables in database PHPMyAdmin 【发布时间】:2012-06-20 14:06:58 【问题描述】:我正在做一个项目,用户可以在网站上保存自己的优惠券代码,所以我想知道最好的方法是什么。
可以说,我有 1 个用户表,如下所示:
userId | firstName | lastName | codeId
然后我有一张优惠券代码表,如下所示:
codeId | codeNumber
所以我能做的就是将codeId
连接到userId
,这样当有人保存优惠券时,优惠券表中的codeId
会进入用户表的codeId
。
但是现在如果用户有多个优惠券,我该怎么办?它们应该如何连接到用户?
我有两个选择:
将优惠券表中的codeId
保存到用户表的codeId
中,例如1,2,3,4,5
,
在优惠券表中新建一行,并通过在优惠券表中添加另一个字段userId
并将添加优惠券的用户的userId
放入其中,将用户连接到代码。
那么这两个选项哪个更好?
【问题讨论】:
那么多个用户可以共享同一个优惠券代码,并且每个用户可以有多个代码? (多对多关系) 是的,这也是网站上的一个选项。 【参考方案1】:两个表之间的多对多关系应该通过添加第三个表连接两者来解决:
user_coupons
- userId
- couponId
【讨论】:
谢谢 Emil,这将是最好的解决方案。【参考方案2】:您的第一个选项违反了 1-NF 规则,即没有任何列会有一组值。
这是典型的一对多关系。您的第二个选项是创建一个单独的表 User_Coupons(不是下划线)并为每个关联创建一个带有 UserID、CouponCode 的行。这两列一起应该是唯一的,以便它们都成为关联表的主键。
【讨论】:
一对多对于这个 IMO 来说是一个糟糕的模型,优惠券代码应该有与之相关的信息。例如他们正在打折的产品/网站、到期日期等。这也将有助于规避重复记录。用户只会与现有记录相关联。多对多是要走的路。【参考方案3】:如果我是你,我的数据库将是:
userId | firstName | lastName
codeNumber | userId
如果您愿意,您可以为任何用户插入多个 codeNumber。
【讨论】:
以上是关于如何在数据库PHPMyAdmin中映射两个表的主要内容,如果未能解决你的问题,请参考以下文章