我正在为照片组织应用程序进行关系数据库设计,正如我之前提到的,我对数据库非常陌生。我需要包括曝光、光圈值和焦距。我提供的值是:
曝光:通常以秒表示,例如使用 1/1000 表示快速曝光,20 表示非常慢;
孔径:范围从 1.1 到 45 等值;
焦距(毫米):范围从大约 8 到 1200。
您是否建议将这些表示为具有一系列值的枚举,或者更确切地说,例如用于曝光的 varchar、用于光圈的文本和用于焦距的 int(我使用的是 MySQL)?
我仍然不是 100% 清楚你为什么要使用哪些数据类型。
再次感谢您的洞察力和建议。
您可以将
double
/float
用于曝光和光圈,因为它们带有浮点数和int
/smallint
用于焦距。您可以使用varchar
所有这些,但是如果您需要对这些不好的计算进行任何计算,并且在排序时您无法得到正确的输出,因为服务器将这些值视为字符串(如果使用varchar
)。就我而言,我总是将数字数据类型用于数字。你将如何处理这些数字?
如果您只显示它们,请使用字符串类型,例如
VARCHAR(20)
.如果您需要对它们进行数学运算,那么
FLOAT
可能是合适的。如果您要搜索精确的数值,则可以选择上述任何一种。
如果您要搜索一个范围,那么可能
FLOAT
.如果该值显然是一个整数,则使用适当大小的
INT
. 例如,SMALLINT UNSIGNED
允许值 0..64K,适用于像素宽度/高度。但百万像素将需要INT UNSIGNED
。或者,这可能是一个FLOAT
,如“10.3”百万像素。如果它只是产品的规格——不可搜索、不可计算等,则需要更长的字符串,例如“F4.5, 1/400s, no flash”。
或者查看 EXIF 格式的规范。请记住,技术会进步。EXIF 是一种可扩展的格式。
我提取了宽度、高度和文件大小,以及 EXIF 的字符串。这对我所拥有的来说已经足够了,同时不会丢失 EXIF 信息,以防我以后改变主意。