我的MySQL架构是否有意义?有什么建议?

时间:2015-05-13 20:23:56

标签: mysql sql

我需要创建一个存储以下内容的数据库(总共约5,765个条目):http://s18.postimg.org/s73exwemf/Capture.jpg

我正在使用MySQL Workbench来创建我的架构。到目前为止,我有一个包含以下列的表:

EPSG代码(INT) - PK,NN

CRS_NAME CHAR(50) - UQ

CRS_TYPE - ENUM('预计','地理2D','地理3D','地心','垂直','复合')

PROJ_FILE - CHAR(800)

我的数据表有意义吗?通常,我将使用EPSG代码检索CRS名称,类型和proj文件内容。但有时,唯一可用的信息可能是CRS名称。这就是为什么我让CRS_NAME成为一个独特的索引。

这有意义吗?我是SQL的新手,到目前为止我很享受它。

1 个答案:

答案 0 :(得分:1)

以下是大多数人在使用数据库(主要是MySQL)近10年后开发的个人偏好。

  • CRS_NAME:独特的关键声音适合我。
  • CRS_TYPE:我倾向于远离数据库中的枚举。相反,我建议一个单独的CRS_TYPE表,并放置一个CRS_TYPE_ID字段 在表中而不是枚举类型。我不会让CRS_TYPE.ID成为一个 自动递增;理想情况下,您希望它反映一个中使用的值 使用您可能使用的任何编程语言枚举。 (从技术上讲,附加表只是必需的 文档和更简单的报告目的。)
  • PROJ_FILE: TINYTEXTMEDIUMTEXTTEXT等......可能是更好的选择(或等效BLOB s)。 CHAR(800)将使用800(或更多 取决于字符集)字节是否保持不存在或是 充分。 VARCHAR(800)可能更好(从空间使用的角度来看),但是如果 使用MyISAM引擎,导致数据行动态(减慢速度 查询)。无论使用何种引擎,TEXT和BLOB类型都只占用 他们需要尽可能多的空间而且不会碎片"像VARCHAR这样的表。 缺点是它们在搜索范围内要复杂得多 和索引。