Динамическое создание новых таблиц поиска на основе значений в основной таблице данных

Я работаю над приложением, которое принимает любые загруженные данные CSV, хранит их вместе с другими наборами данных, которые были загружены ранее, а затем производит вывод (CSV или HTML) на основе выбора пользователем столбцов / значений, которые они хотят вернуть. База данных будет автоматически расширена для обработки новых / других столбцов и типов данных по мере необходимости. Это предпочтительнее модели «сущность-атрибут-значение».

Пример - загрузка этих двух наборов в пустую базу данных:

набор данных A:

name  | dept  | age   
------+-------+------
Bob   | Sales | 24
Tim   | IT    | 32

набор данных B:

name  | dept  | age  | salary
------+-------+------+--------
Bob   | Sales | 24   | £20,000
Tim   | IT    | 32   | £20,000

Программно изменит таблицу «данных», так что при импорте набора данных A будут созданы 3 новых столбца (имя, отдел, возраст). В результате импорта набора данных B создается 1 новый столбец (зарплата). На данный момент забудьте о том, следует ли объединять наборы записей или нет и что здесь нет нормализации.

У меня проблема в том, что некоторые столбцы также будут иметь значения поиска - допустим, столбец Dept в какой-то момент в будущем будет иметь связанные значения, которые дают адрес и номера телефонов этого отдела. То же самое можно сказать о столбце Заработная плата, поиске налоговых групп и т. Д.

Количество столбцов в этой большой таблице не должно становиться слишком большим (несколько сотен), но должно быть достаточно большим, чтобы пользователь мог управлять структурой и значениями таблицы поиска через панель администратора, а не привлекать разработчиков каждый раз.

Вопрос заключается в том, следует ли использовать отдельные таблицы поиска для каждого столбца (значение, описание) или комбинированную таблицу поиска, которая ссылается на столбец (столбец, значение, описание). Обычно я бы выбрал отдельные таблицы поиска, но здесь приложение должно будет создать их автоматически (например, lookup_dept, lookup_salary), а затем добавить новое соединение в главный оператор SQL. Это будет сделано по запросу пользователя, а не при добавлении столбца (чтобы избежать сотен пустых таблиц).

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

Мне кажется, что индивидуальные поиски имеют смысл, но я могу лаять совершенно не то дерево.


person Alistair Knock    schedule 23.03.2009    source источник


Ответы (3)


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

Да, приложение должно будет создавать таблицы и ограничения автоматически: я бы обычно этого не делал, но тогда это приложение уже изменяет существующие таблицы и добавляет к ним столбцы, чего я обычно тоже не делаю!

person Tony Andrews    schedule 23.03.2009

Ах, идея "Одна настоящая таблица поиска". Один из редких случаев, когда я согласен с господином Целко. поиск Google тоже

Индивидуальные столы каждый раз. Это «правильно» в смысле базы данных.

Моя причина (пожалуйста, никаких педантов нормализации): каждая строка в таблице хранит только одну сущность. например, названия фруктов, марки автомобилей, марки телефонов. Смешивать их - ерунда. Я мог бы иметь телефонную марку под названием «Яблоко». Э ... подожди ...

person gbn    schedule 24.03.2009
comment
Он отличал бы фрукты от телефонов по атрибуту type (или column, как указано в вопросе). - person David Balažic; 16.12.2016

Вы сказали,

Это предпочтительнее модели «сущность-атрибут-значение».

Но мне кажется, это именно то, что вам нужно.

Рассмотрите возможность использования хранилища троек RDF и запросите его с помощью SPARQL.

Забудьте о SQL, это работа для RDF.

person Fenugreek Femtosecond    schedule 18.12.2009