- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个关于存储依赖关系的数据库技术的问题。我知道那里有很多,但我不能轻易地将它们放在我需要的方案中。我创建了简单的图像:
如您所见,我需要创建一个相互依赖的技能树(就像在游戏中一样)。因此,例如,如果有人想要拥有技能 8,我可以告诉他他需要先拥有技能 1、2 和 5。
这可能适用于数据库中的历史数据,但我不太清楚如何动态地执行此模型。我遇到的问题是,技能将一直添加到树中所有可能的位置。没完没了。可以在任何级别添加技能。
现在,在第一个问题之后,还有一个更复杂的问题。我也需要有水平的技能。因此,例如技能 1 可以有 10 个等级。并且只有在技能 1 达到 5 级后才能达到技能 2。
对于玩魔兽世界之类的游戏的人来说应该是可以理解的。
注意一点,技能可以随时添加,添加后不能更改。在正常基础上。以防万一一些技能会非常糟糕或类似的东西,然后它会被删除,但这种情况很少发生。
感谢您提供建议、链接或任何其他 Material !
最佳答案
我有足够的挑战来解决这个问题,但我没有足够的挑战来解决 MySQL 中的问题。考虑到这一点,这是您的问题的 Postgresql 版本:
with recursive
skill_list(skill_id) as
(
select distinct skill_id from skill_req
where req is not null
union
select distinct req from skill_req
where req is not null
)
,skill_tree(skill_group, depend_on) as
(
select skill_id, skill_id -- seeds
from skill_list
union
select st.skill_group, sr.req
from skill_req sr
join skill_tree st
on sr.skill_id = st.depend_on
)
,skills_required as
(
select skill_group, depend_on
from skill_tree
where skill_group <> depend_on -- remove seeds
)
select
sl.skill_id,
array_agg(sr.depend_on order by depend_on) as array_version,
array_to_string(array_agg(sr.depend_on order by depend_on), ',')
as group_concat_version
from skill_list sl
left join skills_required sr on sr.skill_group = sl.skill_id
group by sl.skill_id
数据:
CREATE TABLE skill_req
(skill_id int, req int);
INSERT INTO skill_req
(skill_id, req)
VALUES
(2, 1),
(4, 3),
(5, 1),
(6, 4),
(6, 2),
(7, 6),
(7, 9),
(8, 2),
(8, 5),
(9, 3),
(10, 4),
(10, 5),
(10, 9);
输出:
skill_id | array_version | group_concat_version
----------+---------------+----------------------
1 | {NULL} |
2 | {1} | 1
3 | {NULL} |
4 | {3} | 3
5 | {1} | 1
6 | {1,2,3,4} | 1,2,3,4
7 | {1,2,3,4,6,9} | 1,2,3,4,6,9
8 | {1,2,5} | 1,2,5
9 | {3} | 3
10 | {1,3,4,5,9} | 1,3,4,5,9
(10 rows)
关于php - 技能依赖的Mysql技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10424047/
Ai时代的产品经理 随着人工智能(AI)的飞速发展,AI已经从一个前沿技术概念逐步演变为驱动各行业创新的核心力量。从智能助手到自动驾驶,从个性化推荐系统到图像识别,AI正在以不可思议的速度改变着
我在我的 Azure 帐户上创建并部署了 Node.js 机器人。我还添加了 Cortana channel ,并启用了通过连接服务管理用户身份和请求用户个人资料数据(此处我有 User.Info.E
上个学期我介绍了 Java 中的面向对象编程,下学期我将学习 Java 计算机科学 2,它基本上学习用 Java 实现的各种算法和数据结构,例如链表、二叉树等。 ..我可以通过哪些方法来巩固在面向对象
我想在网站中添加水平滑动效果。这更像是网站中的“我们是谁”、“我们的技能”、“我们的服务”、“我们的投资组合”:http://markline.org/或者类似于 http://greenacrein
我是一名 C++ 开发人员(主要是 ATL/COM 的东西),直到 2001 年我和我们中的许多人一样转向 C#。从那时起我就没有做过太多 C++ 编程。 关于如何重振我的 C++ 技能,您有什么建议
即使代码必须由 dba 授权或创建,创建表和索引等对象也是必不可少的。有经验的开发人员应该注意哪些其他通常由 dbas 执行的领域? 最佳答案 开发人员有责任尽一切努力使他的代码a)正确并且b)快速。
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
食物语宫保鸡丁 获得方式 1、玩家通过限时食魂召唤活动中抽取的方式获得宫保鸡丁。 2、玩家通过主线关卡有几率掉落不同品质的宫保鸡丁。 3、玩家可以使用100个宫保鸡丁信物兑换宫保鸡丁食魂。
白狼属性 阴阳师白狼40级后,各项属性基本上就是一个输出式神的正常数值,攻击有3000,生命防御会比辅助类的式神低一些,速度暴击都是S。 白狼技能分析 【文射】:普通攻击,白狼射出注入了妖
我需要修改我发布的 Alexa 技能。我熟悉亚马逊在发布技能后自动创建的“开发中”技能版本。我不明白的是我如何迭代我的技能,特别是当我需要同时更改交互模型和链接的 Lambda 函数时? 例如,我可以
我想知道是否可以使用 papertrail 实现以下用例 gem ? 维基百科类型的应用程序,其 wiki 页面登录的用户可以更改/编辑,其中: 版主可以撤消特定更改: 我知道 papertrail
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭10 年前。 Improv
我正在创建 Alexa 技能,我已经编写了几个自定义和默认 intent ,并且它们工作正常。 现在我想写一个后备 intent ,其中我想获得询问/发送到 Alexa 技能的确切语句,有没有一种方法
我正在学习 js 并创建简单的 Alexa 技能。我想更好地理解模板代码,我正在研究 https://ask-sdk-for-nodejs.readthedocs.io 上的文档但我找不到这个问题的答
我在美国和德国成功发表了我的第一项技能。在扩展到更多区域时,我遇到了无法在 DE 中重现的帐户链接问题。 在触发认证之前,是否有在多个国家/地区进行有效测试的最佳实践。到目前为止,我读到你应该更改亚马
设置完所有内容后,我在 Alexa 开发人员中测试技能时遇到此错误 请求技能的响应有问题,然后我将该 json 响应放入 lambda 测试中,得到以下结果 { "errorType": "TypeE
我希望能够通过我的 Alexa 技能运行内置或第三方技能。例如,我希望能够说 “Alexa,开始午睡” 并让 Alexa 关闭所有灯,启动特定的 Tune-In 电台,并设置 30 分钟的闹钟。但是我
我已经在我的技能中添加了 APL 支持,但现在我不明白如何检查设备是否有显示屏并因此支持 APL。在 Node.js 中看起来很简单,但 Python (3.7) 一直让我发疯。我已经尝试过提到的方法
我正在做 Hyperskill 加密 - 解密项目,描述如下,我遇到了问题。例如,如果我尝试加密字母 = a key = 1,则效果很好,输出将是:b。但如果 letter = z, key = 1,
我正在制作一个返回音频但仅持续 x 秒的函数。 如果用户说 给我放一首歌 x 秒 我正在播放歌曲,但需要在 X 秒后取消播放。因此,我的计划是在运行音频之前启动计时器 x 秒。然后,一旦计时器到时,就
我是一名优秀的程序员,十分优秀!