灵活的形式和支持的数据库结构

2024-01-05

我的任务是创建一个应用程序,允许管理员更改用户输入表单的内容(即添加任意字段) - 其内容存储在数据库中。想想 Modx/Wordpress/Expression Engine 模板变量。

我一直在研究的方法是实现规范一致的具体表(即用户配置文件、用户内容等)和一些通用字段数据表(即文本、布尔值)来存储非特定值。表单(和模型字段)将通过首先查询表并检索相关列来生成 - 尽管我还没有考虑如何设置验证。

我已经研究过这个问题,它似乎表明了一种 EAV 类型的方法 - 从我的简短研究来看 - 看起来它可能是一个比其灵活性带来的好处更大的负担。

然而,我在这里读过几篇文章,这些文章表明这​​是一条危险的路线:

如何设计一个布局可能随时间变化的通用数据库? https://stackoverflow.com/questions/3011224/how-to-design-a-generic-database-whose-layout-may-change-over-time

动态数据库模式 https://stackoverflow.com/questions/66385/dynamic-database-schema/

如果有人可以提供一些关于此事的建议,我将不胜感激

regards

SWK


几年前我创建了一个非常大的 EVA 数据库(PHP w/ PostgreSQL)。结果很棒,但这是一个大项目($$$)。所有表单都是完全动态的,具有表单/字段版本控制、发布工作流程、匹配动态报告等。

EVA 基础知识很简单。输入数据并不是困难的部分。但是表单版本控制和报告......您可能需要花费数年时间才能做到正确。

如果我今天再做一次,我会使用一种较新的 NoSQL 解决方案进行研究(http://en.wikipedia.org/wiki/NoSQL#Document_store http://en.wikipedia.org/wiki/NoSQL#Document_store)。我想要创建一个可以传递给表单生成器的 DTO 样式类。 “修改”表单,实际上就是修改DTO。然后我会将 DTO 持久保存到文档/对象数据库中。

此外,当您构建 alpha 解决方案时,请考虑如何解决包含版本控制和报告需求的测试用例。

这是我的意思的一个例子:一个简单的“提问表格”。

  • 原版(版本1):有第一、最后、问题
  • 添加电子邮件字段(版本2):第一个、最后一个、电子邮件、问题
  • 有人改变了对电子邮件的看法:(版本 3):第一、最后、问题
  • 新的营销人员进来并改变了它:(版本 4):全名、电子邮件、问题

现在,您需要生成报告 (csv)。事情变得棘手。你怎么做呢?

我们通过引用以前版本的字段级版本控制解决了这个问题。另外,报告系统要求最终用户在运行之前组装报告数据源的定义。 (将报告字段绑定到数据字段等)。

但是,对于文档数据库,我想您可以采取不同的方式。我believe像 CouchDB(其他?)这样的新数据库具有内置的机制来处理这些问题。

祝你好运!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

灵活的形式和支持的数据库结构 的相关文章

  • 创建表时 MySQL 语法错误

    我正在尝试在 Filemaker gt MySQL 转换脚本中使用此查询 表创建步骤直接从 phpMyAdmin 导出中获取 并添加到 DROP 语句中 DROP TABLE IF EXISTS artifacts CREATE TABLE
  • PHP 联系表单未提交

    您好 我之前曾成功使用过这个非常简单的 php 联系脚本 但当我尝试在新的 HTML 页面上实现它时 表单不会提交 任何人都可以看到任何明显的错误吗 任何帮助将非常感激 这是表单的 html div div
  • 使用 PHPUnit 模拟对象是否有可能期望调用神奇的 __call() 方法?

    我在测试中有一个模拟对象 真实的对象 PageRepository 使用 call 实现了一个神奇的方法 因此如果您调用 pageRepository gt findOneByXXXX value of field XXXX 它将在数据库中
  • MySQL 更新具有多个值的查询

    我在数据库中有一个表 其记录如下 match id guess result 125 1 0 130 5 0 233 11 0 125 2 0 我的用户为每场比赛选择一个猜测 我有一个函数可以根据比赛的结果计算猜测的结果 如果猜测正确 结果
  • 如何在Sequelize中配置一对多关系?

    我目前正在使用 Express 和 Sequelize MySQL 想知道解决这个问题的最佳方法是什么 如果这是一个基本问题 我很抱歉 因为我对 Sequelize 甚至 SQL 数据库都很陌生 我有一个模型User像这样 export d
  • 使用 PHP 将对象插入 Google Cloud Storage

    说实话 我对缺少使用 PHP 的 Google Cloud Storage 文档感到非常沮丧 我在这里 Stackoverflow 找到的大部分内容都已经过时了 这是我的尝试 postbody array data gt file get
  • 服务容器的使用寿命是多少?

    我正在尝试了解 Symfony2 框架 来自 Java Spring 背景 我意识到 Symfony2 中的 Scope 与 Spring 中的 Scope 不同 此外 通过 Symfony3 范围已弃用 https stackoverfl
  • 使用 Java 连接到 MySql - SSL 连接

    我一直在尝试连接到 MySql 数据库 该数据库使用 ssl 连接与 java 并遇到麻烦 如果任何人可以帮助我 将会有很大的帮助 手动连接MySql 我们使用MySQL Workbench 参数 主机名 test db1 ro xxxxx
  • 用于 Mysql 查询的 FLASK HTML 字段

    你好 Stackoverflow 社区 我是 FLASK 的新手 但是虽然学习曲线非常陡峭 但有一个项目我无法理解 我使用一个非常简单的 HTML 搜索表单 用户在其中输入城市名称 此输入将传递到 Mysql 查询并将输出返回到表中 一切正
  • 使用 PHP 针对远程证书进行 Windows 应用商店 IAP 签名验证

    我正在尝试验证 Windows 应用商店应用程序的 PHP 中的 IAP 收据 基本上 尝试将此示例代码转换为 PHPhttp msdn microsoft com en us library windows apps jj649137 a
  • 终端从包含空格的变量传递参数

    在终端中如何将包含空格的字符串作为参数传递 它实际上跳过了空格后面的部分 只取第一个单词 word soccer ball shell exec casperjs test js word word 那么我怎样才能转义空白它只运行这个命令
  • 550 Bad HELO - 主机冒充域名 Laravel

    我正在尝试设置 Laravel 身份验证 包括 密码重置 功能 但当我尝试发送电子邮件时 我偶然发现了一个错误 我得到的错误是 Expected response code 250 but got code 550 with message
  • 什么会导致 PHP 变量被服务器重写?

    我的公司给了我一个虚拟机来安装网络软件 但我遇到了一个相当奇怪的问题 如果 PHP 变量与特定模式匹配 服务器就会覆盖 重写 它们 什么可以像这样重写 PHP 变量 以下是一个完整的独立脚本
  • 如何反转散列和加盐密码? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 vBulletin 登录使用它来交叉引用数据库 md5 md5 pass salt 我如何制作一个 PHP 脚本 以便每个密码
  • 如何在 Yii 框架中从数据库中获取所有表名和列名

    我正在开发一个模块 我想在其中执行动态相关下拉表和列名称功能 前任 获取所有表名称并将其显示在下拉字段中 选择特定表后 我想在下拉字段中再次显示其所有列名称 问题是 1 如何从数据库中获取所有表名 2 如何从表中获取所有列名 我尝试了一些文
  • 以编程方式添加数字签名外观?

    我正在以编程方式对我的 PDF 文件进行签名 并且我想将签名外观添加到 PDF 我需要哪些对象才能实现此目的 我知道我必须Annotations BBox and XObject但我真的不知道按什么顺序以及是否需要其他东西 调试此类内容以找
  • 基于 ajax 的弹出窗口中的 Mathjax + CKEditor 4 + CKEditor

    我已经配置了 CKEditor 4 并且我的页面上有以下内容 我的页面中有一个 CKEditor 设置值的两个选项 这两个选项本身分别选项两个基于 ajax 的弹出窗口 这些基于 ajax 的弹出窗口包含 CKEditor 现在我有以下问题
  • PHP 插入中的 mysqli_affected_rows

    我有这个代码 if mail to subject message headers insert member sql INSERT INTO members id username VALUES id username insert me
  • golang sql 驱动程序的准备语句

    关于golang的sql driver 下面两条语句有什么区别 store DB is sql DB type rows err store DB Query SQL args err nil defer rows Close and st
  • 计算 MySQL 中的行数以及实际行内容

    MySQL 中有没有办法执行单个 SQL 语句来返回所选行以及结果行数 我可以做这个 SELECT COUNT FROM BigTable WHERE firstname LIKE a 这给了我一个带有计数 37 781 的结果行 我可以像

随机推荐