php - 将关系型与非关系型混合(MySQL 和 MongoDB)

标签 php mysql sql mongodb database

这个问题以前已经讨论过,但我还没有找到明确的答案,它只是粗略地描述为火和水,仅此而已(来 self 的研究)。

关系型数据库和无关系型数据库有很大不同,但它们都提取数据,对于我的项目,我计划使用无关系型数据库,但是这将安装在很多地方,有些只能访问 MySQL(后来移动了) .

那么是否有可能强制MySQL进入一种None Relational模式?我使用了一种模仿它的模式,但它仍然保留了关系数据库的某些方面,到目前为止我还无法克服这些方面(过度依赖 ID 等,导致语法/数据结构困惑)。

那么有没有一个魔法库可以做到这一点?

这是我的数据库架构的粗略轮廓:

1 个表是“元”,它包含 id、类型和日期等基本通用的常用搜索字段。

1 个包含“数据”的表,每个“列”有多行。它无法通过连接完成,因此需要 2 个查询来获取数据。

CREATE TABLE `meta` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `type` varchar(255) NOT NULL,
  `state` tinyint(3) NOT NULL DEFAULT '0',
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
   PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

CREATE TABLE `data` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `meta_id` int(11) unsigned NOT NULL DEFAULT '0',
  `index` varchar(255) NOT NULL,
  `value` longtext NOT NULL,
   PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

正如您所看到的,除非通过 ID/日期或其他内容否则不容易搜索,它还需要 PHP 承担大量的订购等工作。虽然这不是我真正担心的,但要进行实际搜索,需要转储整个数据库并仔细研究它......

什么样的 MySQL 模式(或概念)可以最好地复制无关系模型(并且仍然合理地处理搜索)?

最佳答案

首先,不存在魔法这样的东西。

您重新发明了 Entity-Attribute-Value设计。这是一种非关系型设计。 I've written about this before ,但简而言之:您最终必须在应用程序代码中实现许多您认为在 RDBMS 中理所当然的功能,例如约束和数据类型。

这与Inner-Platform Effect的概念有关。 :

The Inner-Platform Effect is a result of designing a system to be so customizable that it ends becoming a poor replica of the platform it was designed with. This "customization" of this dynamic inner-platform becomes so complicated that only a programmer (and not the end user) is able to modify it.

如果这就是您想花时间做的工作类型,那就去做吧。

我的偏好是对关系数据使用MySQL,对非关系数据使用非关系数据存储。人们可以从同一应用程序访问这两个数据库。

its just roughly described as fire and water and left at that (from my research).

我认为它更像是火和棉花糖。如果你知道自己在做什么,你就能做出世界上最好的美食之一。或者你最终可能会拿着一根沾满烧焦的粘糊糊的棍子。

关于php - 将关系型与非关系型混合(MySQL 和 MongoDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245901/

相关文章:

php - 数据库; OR 语法无效

php - 删除重复的记录,保留id较低的记录

php - 无法从数据库中读出图片,因为使用了外键

mysql - 如何在数据库表列中搜索多个字符串?

php - 我是否需要在数据库中为每个用户信息建立一个表?

php - 如何根据 MySQL 数据库中的禁用词检查输入?

javascript - 通过ajax传递序列化表单和二维数组

php - 搜索逗号分隔的 mysql 字段的最佳方法

php - 生成和读取条形码

sql - 如何在 Oracle SQL 中解析 https 地址中的数字?