MySQL存储“通用”数据(可以很长或很短)

时间:2009-09-07 12:25:17

标签: mysql

好吧我正在开发一个测验...问题的选项...所以我想知道我可以使用哪些选项可以很长(例如,文本/代码的长段)或非常短(例如。布尔值)

如果我使用是否使用VARCHAR(65535)或TEXT我只使用我需要的空间,L字符+ 1或2字节对L字符+ 2字节?任何速度差异?或任何其他问题?

我可以采取哪些其他方式解决这个问题 - 可能非常长或很短的选项,可能应该理想地使用不同的数据类型

2 个答案:

答案 0 :(得分:2)

我认为你应该有多个表,每个答案类型一个。添加父表将为您提供公共字段:

CREATE TABLE answer (
    id INT PRIMARY KEY,
    question_id INT
    type ENUM('bool', 'string'),
    FOREIGN KEY question_ref (question_id) REFERENCES question(id)
) Engine=innodb;

CREATE TABLE answer_bool (
    id INT,
    value TINYINT NOT NULL,
    FOREIGN KEY parent_key (id) REFERENCES answer(id);
) Engine=innodb;

CREATE TABLE answer_string (
    id INT,
    value TEXT NOT NULL,
    FOREIGN KEY parent_key (id) REFERENCES answer(id);
) Engine=innodb;

答案 1 :(得分:0)

我必须同意soulmerge的回答,尽管其中显而易见的固有问题是,只要您想获取核心问题的结果,就可以为所有单个数据类型添加附加联接。

它使得提取数据变得更加复杂,但至少可以防止记录不正确的数据。

在类似的帖子中,回答者推荐一种完全不同的方法,将一个特定列作为varchar并存储所有结果。

https://softwareengineering.stackexchange.com/questions/168578/having-a-generic-data-type-for-a-database-table-column-is-it-good-practice

我讨厌不将相关数据保存在同一记录中,但在同一点上,数据结构的强大功能似乎绝对毫无意义。

+1用于在特定数据类型的表中存储数据。至少在这里,数据必须符合存储规则。