如何在数据库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中映射两个表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHPMyAdmin 在两个表之间创建关系?

如何在 phpMyAdmin 中调用和显示数据库

如何从phpmyadmin中的数据库中的特定表中导出特定列

在单个 MySQL 查询中使用多个临时表(适用于 phpMyAdmin,但不适用于 PHP)

如何快速批量删除Mysql数据库中的数据表

如何在不影响 phpMyAdmin 的情况下从 mysql 中巧妙地删除 pma 表