我们有一个关系数据库(MySql),其中包含一个存储" Whatever"的表。该表有许多字段,用于存储不同(逻辑和数据)类型的属性。请求是要添加另外150个新的无关属性。
我们当然不想添加150个新列。我看到另外两个选项:
在这两种情况下,类型安全都会丢失,但无论如何我们都不需要这样做。
我觉得这个常见问题有一个更智能的解决方案(由于各种原因我们无法移动到NoSql数据库)。有人有提示吗?
答案 0 :(得分:3)
在我们需要为业务对象存储任意扩展属性的早期项目中,我们创建了一个扩展架构,如下所示:
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),
}
给定记录将仅根据ext_fields表中定义的字段的数据类型设置_value列。这使我们不会丢失字段的类型及其价值,并且在利用DBMS为这些数据类型提供的所有过滤方法方面工作得很好。
我的两分钱!