当mysql中的列的类型发生更改时,如何进行设计(以前是int,现在需要是int或string)

q1qsirdb  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(236)

我们正在开发mysql中的数据库模式,以满足不断变化的需求。
它从一个简单的设计开始: fact 表格:

|id|featureid|featurevalue|
|----|----|----|
|1|1000|42|
``` `dimension` 表格:
featureidfeaturename
1000awesome_feature
直到今天,当需要一个新的需求来存储一个字符串时,一切都正常 `featurevalue` 到数据库。
我了解表模式的基本知识,并且 `featurevalue` 列不能同时为 `bigint(20)` 以及 `varchar(255)` .
所以我想添加一个名为 `featurevalue_string` 到 `fact` table。不过,我不太相信这个解决方案,因为只有1到2个具有字符串值的特性,其余的应该仍然是int。
这里的问题是,在我们的数据库设计中,如何适应需求的这种变化?
2nbm6dog

2nbm6dog1#

您可以将其拆分为两列:

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

第一个描述数据,第二个包含数据。
将它们填充为

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

然后,当您选择数据时,可以对featuredatatype中指定的数据类型进行转换。
请注意,这实际上将成为一个维护和报告问题,您可能应该重新处理您的模式和/或重新定义您的问题,而不是这样做。

相关问题