好吧我正在开发一个测验...问题的选项...所以我想知道我可以使用哪些选项可以很长(例如,文本/代码的长段)或非常短(例如。布尔值)
如果我使用是否使用VARCHAR(65535)或TEXT我只使用我需要的空间,L字符+ 1或2字节对L字符+ 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并存储所有结果。
我讨厌不将相关数据保存在同一记录中,但在同一点上,数据结构的强大功能似乎绝对毫无意义。
+1用于在特定数据类型的表中存储数据。至少在这里,数据必须符合存储规则。