gpt4 book ai didi

database-design - "Badge"系统和任意标准的数据库架构 (MySQL/PHP)

转载 作者:行者123 更新时间:2023-12-03 06:14:22 26 4
gpt4 key购买 nike

快速问题:

总而言之,我对如何设计这样一个数据库有点困惑,该数据库允许无限期的徽章规则创建,而不需要对数据库中先前存在的用户表进行结构更改。

存储徽章标题、条件等。该表会是什么样子?

  • badge_id (1)
  • badge_title(10K 徽章)
  • 徽章图像 (10k.jpg)
  • badge_criteria([帖子] >= 10000)
    ...

啰嗦的问题:

我想在我自己的个人项目中实现徽章系统,但正在寻求一些关于如何最好地做到这一点的建议。我一直在这里阅读一些有关徽章系统的问题,但没有看到数据库架构得到太多关注。

基于用户积分的徽章(假设的“10k 徽章”)看起来非常简单。任何影响用户声誉的事件(赞成票、反对票、答案接受等)都会调用一种方法来审查用户的新声誉,并可能授予徽章。

该系统听起来非常简单,但是对于想要轻松创建无数徽章的管理员来说,它看起来像一个数据库 - 其中一些徽章可能基于不同的标准,而不是基于不同的标准只是用户声誉。

用户声誉可能是用户记录本身的一个值。但理想情况下,您不想在创建新徽章时避免向用户表添加新字段吗?例如“已编辑 100 个条目”徽章 - 您不会在用户表中创建新列“entries_edited”,对吗?然后在编辑每个条目后增加该值...

有什么提示吗?

Stackoverflow 存档:

<小时/>

注意:我不是问如何将徽章与用户关联。我不是问如何授予徽章(将以编程方式完成)

最佳答案

鉴于徽章标准可以任意复杂,我认为您不能将其存储在分解为“简单”数据元素的数据库表中。尝试编写一个可以处理任意复杂标准的“规则引擎”将使您走上基本上重写编程语言中拥有的所有工具的道路。

如果您事先知道您希望徽章仅限于某些字段(即徽章仅基于声誉或编辑数量或其他内容),那么您可以将它们存储在一个简单的表格中,例如:

ReputationBadgeCriteria
BadgeId
BadgeName
MinReputation

或者,您可以使用某种 DSL 来编写您的“规则”,但最终您还必须创建一个解析器来在您读取规则时解析它们以及执行这些规则。根据您想要的 DSL 复杂性,这可能不是一项简单的任务。这看起来像是您在问题中要走的路径,其中有一个 Criteria 列(大概是纯文本),其中包含“[Reputation] > 1000”或“[Posts] > 5”之类的内容。您仍然必须解析和执行这些规则,而为此编写某些内容的复杂性取决于您希望这些规则的复杂程度。

我建议您阅读these每日 WTF articles了解为什么这种方法会导致痛苦。

关于database-design - "Badge"系统和任意标准的数据库架构 (MySQL/PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1049233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com