- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有最好的方法在关系数据库中存储诸如玩家背包之类的数据?
假设我想将玩家背包存储在数据库中。
表“eq”的数据库模型如下所示:
玩家 ID |槽 |商品编号 |金额
现在假设我在数据库中有这一行:
1 | 10 | 10 20 | 99
这意味着,ID 为 1 的玩家在第 10 个位置拥有 99 个 ID 为 20 的元素。将这些数据读取到游戏中很容易(如果带有插槽 Y 的行不存在,则意味着该行为空),但保存这些数据有点棘手。为什么?因为如果玩家使用了 99 个 id 20 的元素,他的背包在 RAM 中将是空的,但数据库中仍然会有行。同样,当玩家将元素移动到另一个插槽上时,如何知道何时删除数据库中的插槽?
这是我的两个想法,看起来很糟糕:
当玩家注册新帐户时,我可以将 X 个空行添加到“eq”表中,其中包含他的 id 和以下插槽(1、2、3、4...),然后在保存时迭代玩家 eq 并更新属于玩家的每一行
当保存过程开始时,删除属于玩家的所有“eq”行,然后仅将这些行插入数据库,其中包含项目(保留空槽)
最佳答案
如果您的背包尺寸固定或很少变化,而且不是太大,那么在注册期间为所有插槽创建行可能会有好处。我认为这意味着索引仅在添加或删除玩家时更新,并且优化器使用的统计数据应该保持稳定和有效。使用 INSERT ... ON DUPLICATE KEY UPDATE ...
可能是个好主意对这样的表进行查询,以确保在意外删除行的情况下它能够 self 修复。它的效率不应该比仅执行 UPDATE
低。 .
您还应该能够进行单独的插槽更新。每当玩家使用背包中的元素时,UPDATE
该插槽的内容。如果添加了新项目,请发送 INSERT
命令。如果使用了槽中的最后一个项目,请发送 DELETE
命令代替。当元素被移动时,您只需 UPDATE
更改插槽号的行。您的内存中应该有足够的上下文来确定要做什么,并且任何时候都只能有一个玩家登录一个帐户,对吗?如果你预先创建插槽,你只需做合适的 UPDATE
命令而不是 INSERT
/DELETE
命令。
如果由于某种原因您无法更新单个插槽,您可以通过两次查询保存整个背包。我会发送 INSERT ... ON DUPLICATE KEY UPDATE ...
命令,其中包含包含项目的每个插槽的值。然后我会发送一个 DELETE FROM eq WHERE playerId = ...
查询,如果背包不空,则追加AND slot NOT IN (...)
以及已填充插槽的列表。这样,您就不会删除和创建不必要的行,这应该会更有效。通过预先创建的槽,您可以在一个查询中完成此操作。
关于mysql - 在数据库中存储和保存玩家背包(库存),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41394968/
我的问题是如何在 python 中创建一个简单的数据库。我的例子是: User = { 'Name' : {'Firstname', 'Lastname'}, 'Address' : {'Street
我需要创建一个与远程数据库链接的应用程序! mysql 是最好的解决方案吗? Sqlite 是唯一的本地解决方案吗? 我使用下面的方法,我想知道它是否是最好的方法! NSString *evento
给定两台 MySQL 服务器,一台本地,一台远程。两者都有一个包含表 bohica 的数据库 foobar。本地服务器定义了用户 'myadmin'@'%' 和 'myadmin'@'localhos
我有以下灵活的搜索查询 Select {vt:code},{vt:productcode},{vw:code},{vw:productcode} from {abcd AS vt JOIN wxyz
好吧,我的电脑开始运行有点缓慢,所以我重置了 Windows,保留了我的文件。因为我的大脑还没有打开,所以我忘记事先备份我的 MySQL 数据库。我仍然拥有所有原始文件,因此我实际上仍然拥有数据库,但
如何将我的 Access 数据库 (.accdb) 转换为 SQLite 数据库 (.sqlite)? 请,任何帮助将不胜感激。 最佳答案 1)如果要转换 db 的结构,则应使用任何 DB 建模工具:
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
我想在相同的 phonegap 应用程序中使用 android 数据库。 更多说明: 我创建了 phonegap 应用程序,但 phonegap 应用程序不支持服务,所以我们已经在 java 中为 a
Time Tracker function clock() { var mytime = new Date(); var seconds
我需要在现有项目上实现一些事件的显示。我无法更改数据库结构。 在我的 Controller 中,我(从 ajax 请求)传递了一个时间戳,并且我需要显示之前的 8 个事件。因此,如果时间戳是(转换后)
我有一个可以收集和显示各种测量值的产品(不会详细介绍)。正如人们所期望的那样,显示部分是一个数据库+建立在其之上的网站(使用 Symfony)。 但是,我们可能还会创建一个 API 来向第三方公开数据
我们将 SQL Server 从 Azure VM 迁移到 Azure SQL 数据库。 Azure VM 为 DS2_V2、2 核、7GB RAM、最大 6400 IOPS Azure SQL 数据
我正在开发一个使用 MongoDB 数据库的程序,但我想问在通过 Java 执行 SQL 时是否可以使用内部数据库进行测试,例如 H2? 最佳答案 你可以尝试使用Testcontainers Test
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题似乎与 a specific programming problem, a sof
我正在尝试使用 MSI 身份验证(无需用户名和密码)从 Azure 机器学习服务连接 Azure SQL 数据库。 我正在尝试在 Azure 机器学习服务上建立机器学习模型,目的是我需要数据,这就是我
我在我的 MySQL 数据库中使用这个查询来查找 my_column 不为空的所有行: SELECT * FROM my_table WHERE my_column != ""; 不幸的是,许多行在
我有那个基地:http://sqlfiddle.com/#!2/e5a24/2这是 WordPress 默认模式的简写。我已经删除了该示例不需要的字段。 如您所见,我的结果是“类别 1”的两倍。我喜欢
我有一张这样的 table : mysql> select * from users; +--------+----------+------------+-----------+ | userid
我有表: CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL
我是一名优秀的程序员,十分优秀!