MySQL хранит «общие» данные (может быть очень длинным или очень коротким)

0

ok Я разрабатываю викторину... параметры вопроса... так что мне интересно, что я могу использовать для вариантов, которые могут быть очень длинными (например, длинный абзац текста/кода) или очень коротким (например. булево)

если я использую использование VARCHAR (65535) или TEXT я только для использования пространства, которое мне нужно, L chars + 1 или 2 байта против L символов + 2 байта? любые различия в скорости? или любые другие проблемы?

какие другие способы я могу обойти это - варианты, которые могут быть очень длинными или очень короткими, что, возможно, идеально подходит для использования разных типов данных

Теги:

2 ответа

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;
0

Я должен согласиться с ответом soulmerge, хотя очевидные неотъемлемые проблемы в этом имеют добавочные объединения для всех отдельных типов данных всякий раз, когда вы хотите получить результат для основного вопроса.

Это делает сбор данных более сложным, но по крайней мере вы предотвращаете запись некорректных данных.

В подобном сообщении ответчик рекомендует совершенно другой подход, имеющий один конкретный столбец как varchar и сохраняющий все результаты.

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

Я ненавижу не хранить связанные данные в одной записи, но в то же самое время, по-видимому, сила структур данных кажется абсолютно бессмысленной.

+1 для хранения данных в таблицах для конкретных типов данных. По крайней мере, здесь данные должны соответствовать правилам хранения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню