Динамическое создание новых справочных таблиц на основе значений в основной таблице данных - PullRequest
1 голос
/ 23 марта 2009

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

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

набор данных 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 вновь созданных столбца (name, dept, age). Импортирование набора данных B приводит к появлению 1 вновь созданного столбца (зарплата). На данный момент забудьте о том, должны ли наборы записей объединяться или нет, и что нормализация отсутствует.

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

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 24 марта 2009

Ах, идея " One true lookup table ". В один из редких случаев я согласен с господином Селко. Поиск в Google тоже

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

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

0 голосов
/ 18 декабря 2009

Вы сказали,

Это предпочтение модели значения атрибута сущности.

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

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

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

0 голосов
/ 23 марта 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...