我们正在根据不断发展的需求在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。
这里的问题是,在我们的数据库设计中如何适应需求的这种变化?
答案 0 :(得分:1)
您可以将其分为两列:
FeatureDataType VARCHAR(40) NOT NULL
FeatureData VARCHAR(255) NOT NULL
第一个描述数据,第二个包含数据。
将其填充为
FeatureDataType="INTEGER", FeatureData ="1234"
FeatureDataType="VARCHAR", FeatureData ="fire is hot"
然后,当您选择数据时,可以转换为FeatureDataType中指定的数据类型。
请注意,这实际上将成为维护和报告问题,您可能应该重新设计架构和/或重新定义问题,而不要这样做。