Coder Social home page Coder Social logo

能否支持外键检查 about tabtoy HOT 7 CLOSED

davyxu avatar davyxu commented on May 15, 2024
能否支持外键检查

from tabtoy.

Comments (7)

davyxu avatar davyxu commented on May 15, 2024

你好, 我们项目也碰到这个问题, 正在考虑如何完整实现这种需求

你可以将你们的需求再多提供一些, 这样可以方便我总结实现

from tabtoy.

lkm1107 avatar lkm1107 commented on May 15, 2024

结合之前项目的需求, 也再和我们策划谈论了下, 数值策划在配置的时候,往往会有如下问题

  1. 简单的验证,如已经实现的RepeatCheck、MustFill等, 如简单的数值范围判断(血量在0-1000,掉落权重在0-10000),复杂可以考虑用正则支持?
  2. 跨表的外键检查(也就是主贴中的需求), 物品ID之类往往需要配置在其他表(合成表,掉落表)中, 但是如果是配置了不存在的物品ID又会造成逻辑错误, 所以这边需要有这个需求ForeignKey:"Item.ID"来配置关联
ID ItemID BuffID
int32 int32 repeated int32
RepeatCheck:true MustFill: true ForeignKey:"Item.ID" ForeignKey:"Buff.ID"
1 11 22
  1. 还有一种更复杂的需求,不过感觉没必要在表格中引入这层关联, 这边也举个例子: 战斗系统中, 往往会有很多的技能效果(固定数值回血、按体力上限比例回血,回血buff等等),每种效果当作一个独立的类型, 则每个效果都会有不定项的参数约定:
ID name params
int32 string repeated string
1 固定数值回血 1000
2 按体力上限比例回血 20%
3 回血buff 3;10%(持续3回合,每回合10%)
4 回血buff 4;20%(持续4回合,每回合20%)

这样在配置表的时候, 往往还需要有个效果对应参数的文档来配置,很容易漏掉某个参数,或者应用错参数格式

from tabtoy.

davyxu avatar davyxu commented on May 15, 2024

兄弟, 你跟我想的差不多, 特别是外键这个概念, 非常正规

以下是我对这个功能的设想:
@types表单一样, 这个功能也会使用嵌入的独立表单实现, 叫@verify
大概这样验证:

规则名 条件 字段 条件值
圆形攻击范围匹配 单元格值存在 Skill.AreaType 圆形
圆形攻击范围匹配 单元格值存在 Skill.AreaParam.Radius
圆形攻击范围匹配 单元格值范围约束 Skill.AreaParam.Radius 0<value<10
直线攻击范围匹配 单元格值存在 Skill.AreaType.Line
直线攻击范围匹配 单元格值存在 Skill.AreaParam.Width
直线攻击范围匹配 单元格值存在 Skill.AreaParam.Height
角色限定攻击范围 单元格值等于 Actor.Type 战士
角色限定攻击范围 枚举约束 Skill.AreaType 圆形

逻辑:

  • 规则名相同的视为一组规则
  • 同组规则内, 通过选定不同条件与目标单元格进行匹配检查
  • 同组匹配关系从上到下
  • 同组每一行规则关系为与关系, 就是必须都满足

看看是否能通用你的需求

from tabtoy.

lkm1107 avatar lkm1107 commented on May 15, 2024

@davyxu 需求上是能满足的, 这样做相当于是实现了多层的验证。
不过如果是对某个字段的简单的规则验证, 是不是放Meta中会更好? 策划在配置的时候也能看到这层约束, 而不需要再去另外的表单中对照? 当然,如果是自定义类型的验证是需要放@type或者独立的@Verify中

from tabtoy.

davyxu avatar davyxu commented on May 15, 2024

其实我也希望这样, 但是几个字段的验证, 你写哪个字段呢?
我会给字段加上独立于验证系统的范围验证, 类似于MustFill这种, 简单验证用这个就可以
复杂验证, 再使用这个表就可以

from tabtoy.

lkm1107 avatar lkm1107 commented on May 15, 2024

嗯, 的确, 目前来说常用的也就针对单字段的简单验证(MustFilll,Range[1,100]。。)以及ForeignKey,复杂验证需求相对低, 引入@verify也蛮好的。

from tabtoy.

davyxu avatar davyxu commented on May 15, 2024

这个功能我们已经在项目中改为使用golang代码来实现
我们在项目中有一个table包, 里面有tabtoy输出的代码和一些手动检查表格正确性和构建静态数据的代码
在导表时, 运行一个独立的go文件编译table包来读取导出的json文件并检查内容

这样做灵活度比在导表工具内高很多, 也无需学习. 而且与项目整合的也很好

建议使用这种方法替代新功能制作

from tabtoy.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.