gpt4 book ai didi

mysql - 使用 NoSql 功能装饰现有的关系型 SQL 数据库

转载 作者:行者123 更新时间:2023-11-29 05:34:13 26 4
gpt4 key购买 nike

我们有一个关系数据库 (MySql),其中有一个存储“Whatever”的表。该表有许多字段,用于存储不同(逻辑和数据)类型的属性。要求添加另外 150 个不相关的新属性。

我们当然不想添加 150 个新列。我看到另外两个选项:

  1. 添加一个简单的键值表(ID、FK_Whatever、Key、Value 和可能的类型),其中 *FK_Whatever* 引用 Whatever ID,Key 将是名称的属性(property)。使用 JOIN 查询会起作用。
  2. 向 Whatever 表添加一个大文本字段并将150 个新属性序列化到其中(可能是 Xml)。在某种程度上,这将是存储数据的 NoSql 方式。查询这些字段意味着实现一些智能全文语句。

在这两种情况下都失去了类型安全性,但我们真的不需要它。

我觉得这个常见问题有更聪明的解决方案(由于各种原因我们不能迁移到 NoSql 数据库)。有人有提示吗?

最佳答案

在我们需要为业务对象存储任意扩展属性的早期项目中,我们创建了一个扩展架构,如下所示:

CREATE TABLE ext_fields
{
systemId INT,
fieldId INT,
dataType INT // represented using an enum at the application layer.

// Other attributes.
}

CREATE TABLE request_ext
{
systemId INT, // Composite Primary Key in the business object table.
requestId INT, // Composite Primary Key in the business object table.
fieldId INT,
boolean_value BIT,
integer_value INT,
double_value REAL,
string_value NVARCHAR(256),
text_value NVARCHAR(MAX),
}

给定的记录将只有 _value 列集,该列基于 ext_fields 表中定义的字段数据类型。这使我们不会丢失字段的类型及其值(value),并且在利用 DBMS 为这些数据类型提供的所有过滤方法方面效果很好。

我的两分钱!

关于mysql - 使用 NoSql 功能装饰现有的关系型 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com