这个问题以前已经讨论过,但我还没有找到明确的答案,它只是粗略地描述为火和水,仅此而已(来 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/