【问题标题】:Database field lengths for storing data with unknown und technically unlimited length?用于存储未知且技术上无限长度的数据的数据库字段长度?
【发布时间】:2017-09-07 15:38:58
【问题描述】:

我必须将 DOI 存储在 MySQL 数据库中。 handbook 说:

DOI 号的长度没有限制。

到目前为止,我当前数据中 DOI 的最大长度为 78 个字符。为了不浪费存储空间和安全起见,您会推荐哪种字段长度?一般来说:

考虑到空间和事务的效率,您如何处理不知道必须存储在数据库中的输入数据的最大长度的问题?

编辑

这两个(简化的)表documenttopic 具有一对多关系:

CREATE TABLE document
(
  ID int(11) NOT NULL,
  DOI ??? NOT NULL,
  PRIMARY KEY (ID) 
);

CREATE TABLE topic
(
  ID int(11) NOT NULL,
  DocID int(11) NOT NULL,
  Name varchar(255) NOT NULL,
  PRIMARY KEY (ID),
  FOREIGN KEY (DocID) REFERENCES Document(ID), UNIQUE(DocID)
);

我必须运行以下(简化的)统计查询,返回每个文档引用的主题类别的总值(如果有任何引用):

SELECT COUNT(topic.Name) AS number, document.DOI
FROM document LEFT OUTER JOIN topic
ON document.ID = topic.DocID
GROUP BY document.DOI;

使用的字符集是utf_8_general_ci

【问题讨论】:

  • 此 DOI 号是否有唯一约束? MySQL 服务器会在严格模式下运行吗? FWIW,我认为如果您真的必须容纳例如 65KB 的名称,那么您将不得不忍受某种程度的低效率。
  • DOI 号没有唯一性限制,MySQL 服务器以严格模式运行。

标签: mysql database database-design doi


【解决方案1】:

TEXTVARCHAR 可以存储 64KB。如果您更加偏执,请使用允许 4GB 的LONGTEXT,但如果名称实际上超过 64KB,那么这是一个非常滥用的标准。 VARCHAR(65535) 可能是一个合理的住宿条件。

由于VARCHAR可变长度,那么您实际上只需在使用时支付额外的存储空间。从理论上讲,限制只是限制了可以在现场放置多少数据。

【讨论】:

  • 同意 VARCHAR 没有浪费。数据库将优化空间。所以使用比较长的尺码不会有坏处
【解决方案2】:

空间不是问题;索引可能是个问题。请提供需要此列索引的查询。同时提供所需的CHARACTER SET。有了这些,我们可以讨论各种截止值的后果:191、255、767、3072 等。

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    相关资源
    最近更新 更多