mysql - 数据库设计 - 通用关系? (关系 ID,关系表)

标签 mysql database database-design

我最近加入了一个具有积分系统的项目。您可以通过购买赚取积分,也可以通过兑换代码赚取积分。

每次给出一组积分时,都会在“积分”表中创建一行,跟踪获得这些积分的用户、时间、数量等。

我们还在跟踪积分的授予方式。即代码或购买?

目前数据库的结构如下(针对我的问题进行了缩减):

id | relation_id | relation_table | user_id
--------------------------------------------
30 |    42400    |     coupon     |    1
31 |    39812    |     payment    |    1

我能想到的唯一名称是“通用关系”,但我从未见过这样的东西。

由于一次只有一种关系活跃,我觉得这还算可以接受。

我确实觉得这很奇怪,而且我不确定我会这样做。

这个数据库设计有更好的选择吗?

只有以下内容是更好的选择。

id | payment_id | coupon_id | user_id

在编程中,我可以理解为什么前者更容易使用,但它就是不适合我。

谢谢

编辑:

id 将是主键和 AI,user_id 将是引用用户表的外键,跟踪哪个用户拥有哪个代币条目。

最佳答案

我不知道 id 在您的表中代表什么,因为您已经有 user_id,它是外键吗?

跳过我的上述问题,我建议选择前一个问题。

user_id, relation_id, relation_type, id, points
1          2345         coupon        3    56
6          789          payment       96   78

因为在后一个中,您无法跟踪关系类型,当您想了解为什么特定用户给出了 x 个分数等时,这一点变得更加重要。

我们还在跟踪积分的授予方式。即代码或购买?

因此,如果您确实想跟踪积分,您必须知道类型代码或购买。

由于一次只有一种关系处于活跃状态,我觉得这还算可以接受。我确实觉得这很奇怪,而且我不确定我是否会这样做。这个数据库设计有更好的选择吗?

它是一种 bool 值(购买(0)或优惠券(1)),是的,一次只有一个关系处于事件状态。但那完全没问题。您必须创建两个不同的购买跟踪表和优惠券跟踪器,这对我来说看起来很奇怪。这也违反了规范化规则。

关于mysql - 数据库设计 - 通用关系? (关系 ID,关系表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39001246/

相关文章:

PHP登录页面代码问题。登录页面加载消息显示无效登录

mysql - 为什么MySQL不使用索引?

sql - wordpress 安装的延迟问题(来自 SQL 导入)

sql - 关于 1 :1 relationship 的困惑

sql-server - 同步桌面应用程序的数据库设计

php - WordPress 从主机迁移到本地服务器

php - 在PHP页面上显示mysql数据库中最后添加的用户

mysql - 从 MySQL 表中选择最后 20 个最新的唯一 URL

php - 使用 MySQL 数据库字段枚举值填充 PHP 组合框

mysql - 数据库中的列排序会影响性能吗?