MySQL中的列类型更改类型时如何设计? (以前是int,现在需要是int或字符串)

时间:2018-10-11 17:59:26

标签: mysql database database-design entity-attribute-value

我们正在根据不断发展的需求在MySQL中开发数据库架构。

从简单的设计开始:

fact表:

|id|featureid|featurevalue|
|----|----|----|
|1|1000|42|

dimension表:

|featureid|featurename|
|---------|-----------|
|1000|awesome_feature|

直到今天,当需要新的要求将featurevalue字符串存储到数据库时,一切都很好。

我了解表架构的基础,并且featurevalue列不能同时为bigint(20)varchar(255)

因此,我正在考虑将类似featurevalue_string的新列添加到fact表中。 但是,我对这种解决方案并不十分满意,因为只有1或2个具有字符串值的功能,其余功能仍应为int。

这里的问题是,在我们的数据库设计中如何适应需求的这种变化?

1 个答案:

答案 0 :(得分:1)

您可以将其分为两列:

FeatureDataType VARCHAR(40) NOT NULL 
FeatureData VARCHAR(255) NOT NULL 

第一个描述数据,第二个包含数据。

将其填充为

FeatureDataType="INTEGER", FeatureData ="1234"
FeatureDataType="VARCHAR", FeatureData ="fire is hot"

然后,当您选择数据时,可以转换为FeatureDataType中指定的数据类型。

请注意,这实际上将成为维护和报告问题,您可能应该重新设计架构和/或重新定义问题,而不要这样做。