我在SQLServer中有一个表,其中一个字段期待相当混合的数据;有时它会收到一个文本值,让我们为了论证而说:
ASCII ART PICTURE OF A CAT WITH A POORLY SPELT CAPTION
然后有时它会包含一个实际的JPEG,其中包含拼写错误的猫的图像。在这个实例中使用的最佳数据类型是什么?一个又大又长的对象。
我们可以假设ASCII艺术图片相当小,比如16个字符x 16个字符。您可以将它们存储在VARCHAR(256)字段中,至少如果它不适合人们发送的那些讨厌的大2MB JPEG。
在语义上,我们可以说这两个都是猫的图像,虽然格式非常不同。我想我问的问题是,如果有一个合适的数据类型来处理语义上相同的值,但可能会有非常不同的形式。
在这种情况下,关于我们的猫的数据量变化很大。有时猫标题图像非常小,我们只需要存储~256字节的信息。但有时它非常大,如果它是一个明文ASCII猫图像,它可能需要大约256兆字节,但我们可以用JPEG推它,它只需要2兆字节。是的,moar cat图像可以存储在我们的硬盘上!但很自然地,我不想将那些~2006byte的ASCII图像转换成2MG的JPEG图像,因为那样我就无法在我的硬盘上安装尽可能多的猫图片。
如果有这样的建议 - 我无法为这些2MB JPEG制作新格式,输出将始终为2MB,以便与传统的第三方兼容,关闭源猫标题生成器。这会产生如此令人难以置信的令人敬畏的字幕,重写它是一项艰巨的任务,并且超出了所编写软件的范围。
注意:实际的真实用例是关于遗传分析机器的数据,如果您有兴趣,但我更倾向于将问题作为猫图片的更一般用例。这是互联网和所有。
我们可以说数据库结构看起来有点像
MyCatContent
idCatContent INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
catContentType INT NOT NULL REFERENCES CatContentType (catContentType),
content {whatSortOfFieldIsThis?}
CatContentType
catContentType INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(20) NOT NULL