【问题标题】:Database / application design for very flexible application [closed]非常灵活的应用程序的数据库/应用程序设计[关闭]
【发布时间】:2020-03-12 15:00:46
【问题描述】:

我很难理解我正在开发的应用程序背后的逻辑。我正在用 PHP 和 MySQL DB 编写它。基本上,逻辑基于这样一个事实,即一切事物都有属性——例如,汽车有颜色、4 个门、车顶、发动机等等。然后每个部分都有自己的属性,并且可能由较小的部分组成。本质上每个部分都有自己的部分,每个属性都有自己的属性。

我在一个应用程序中使用了类似的逻辑,其中您拥有用户、角色和权限。每个角色可能只能看到某些角色,但这是使用分配给每个角色的权限定义的。每个对象类型(用户、角色、权限)都有自己的属性。用户的一个这样的属性是角色。对于角色,这将是权利。然后它们有自己的字段(其他属性),例如名称,描述等。名称有字段类型=文本,描述=长文本/文本区域等的属性,然后它们都有自己的描述,占位符,是否它们是直接可编辑或自动的(在创建/更新对象时 - 例如插入日期或更新日期)。然后您需要一个 UI 来定义字段 - 本质上,您需要知道字段具有哪些属性才能定义 UI 以创建或编辑字段 - 先有鸡还是先有蛋?如果所有对象都存储在数据库中,您如何/在哪里定义 UI 的标记?你能做到这么深还是会导致无限循环?

以前有人构建过这样的系统吗?似乎我一直到一个地步,我把所有的东西都抽象得太远了,让自己感到困惑并休息一下,然后我只是一遍又一遍地重复这个过程。不确定我是否应该继续走这条路,或者我是否应该在数据库中可靠地定义所有内容(例如带有名称、描述等列的用户表以及用户和角色以及角色和权限之间的链接)。欢迎任何意见。

PS 我曾尝试为此使用 WordPress,但它不适合这个项目,因为根据我的经验,WP 不够灵活,无法根据需要更改用户列表或表单。

【问题讨论】:

  • 请人们不要投票关闭,除非他们愿意说明理由?!?我只是在征求意见 - 这可能不是一个只有一个正确答案的问题,但它是完全有效的,并且符合 StackOverflow 规则......
  • 参见 JSON。见mysql.rjweb.org/doc.php/eav

标签: php mysql database-design application-design


【解决方案1】:

没有无限的灵活性。如果有,整个互联网可以由一个配置略有不同的应用程序提供服务:)

Mysql 是一个关系型数据库。关系数据库本质上不是很灵活。表由行组成,每行具有固定数量的列,并表示具有固定数量属性的实体。如果这不符合您的需求,您可以查看对象数据库或图形数据库。

关于 UI,Symfony Form 组件可以根据用户定义的“类型”生成表单,并且它本质上是递归工作的:每种类型都可以是“简单”输入类型,如文本输入、复选框等,或“复合”输入,这将呈现一个子表单,该子表单又可以具有其他嵌套的子表单等。不过,它是一个相当复杂的组件,一旦您开始深入了解复杂的验证逻辑……您会开始想知道为什么决定采用这种“灵活"首先是方式。

【讨论】:

  • 感谢您的回复@Karolis。我只是简单地研究了一下,它看起来与我目前所拥有的相似(尽管我的更基本)。我决定一边看电视一边考虑这个问题,并且可能想出了一个快乐的媒介,其中只有字段是硬编码的,但字段对象类型的字段列表是数据库驱动的。我必须为表单元素定义标记,仅此而已。在接下来的 24 小时内,我会以这种方式进行尝试,如果我发现自己没有进一步的进展,我会进一步研究 Symfony。谢谢你的警告,顺便说一句:)
猜你喜欢
  • 1970-01-01
  • 2018-01-16
  • 2010-09-08
  • 2012-02-25
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2017-07-29
  • 2023-03-18
相关资源
最近更新 更多