postgresql - 在 PostgreSQL 中设计 *PROMOCODE* 数据库模式时面临的问题

标签 postgresql database-design

致力于新的应用程序数据库架构设计。在该应用程序中,有一个供用户使用的促销代码选项。我遇到了问题,或者我可能对设计促销代码表及其工作感到困惑。我创建了具有以下属性的表。

Restricted_Promos 表是仅针对特定用户的促销代码。

PromoCode:                                                         
name
description
status
valid_from
valid_til
discount
max_usage
created_at
created_by
updated_at
updated_by 

Restricted_Promos:
PromoCodeId
UserId
Count

我遇到问题的场景是:

  • 多个用户如何使用一个促销代码?以及如何追踪 他们喜欢谁使用过以及使用了多少次单一促销代码?
  • 如果促销代码是针对特定用户且仅供一次性使用的,如何 应该在那管理?

  • 此促销代码架构是否灵活?就像将来如果我必须 添加基于某些外部公司促销(如银行)的促销代码。 它也适用于此吗?

最佳答案

我会将 Restricted_Promos 重命名为 Assigned_Promos。然后我会创建一个新表:

Promo_Usages:
PromoCodeId
UsedBy
UsedAt

现在您知道谁以及多少次使用了促销。

要管理最大使用次数,我建议在 Promo_Usages 上添加触发器并将 count(PromoCodeId)PromoCode.max_count 进行比较。顺便说一句,我强烈建议您使用一种命名约定。现在你正在混合几种。

这个模式已经足够好了。

关于postgresql - 在 PostgreSQL 中设计 *PROMOCODE* 数据库模式时面临的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57586021/

相关文章:

Python读写2个DB

python - 基于python的PostgreSQL文档

mysql - 如何在 PostgreSQL 中关闭严格模式

mysql - 比较密码和用户名的准确性 : utf8_general_ci or utf8_bin?

同一表中不同用户组的mysql数据库架构

sql - 加入多对多关系

postgresql - 记录设置为 SECURITY DEFINER 的 Postgres 函数的调用程序

database-design - 您是否应该复制数据?

mysql - 如何存储嵌套位置?

database-design - 由两个 ISO 8061 日期组成的复合排序键的 DynamoDB 查询是否返回正确的结果(使用 BETWEEN)?