2009-05-24 5 views
1

Предположим, что у меня есть таблица SQL кортежей (id, lastname, firstname, профессия), где все значения являются строками (ok, очевидно id - это ключ).Как преобразовать таблицу SQL в таблицу указателей?

Я хочу преобразовать его в таблицу с кортежами (id, lastid, firstid, Occupid), где я сохраняю указатели только на другие таблицы, содержащие фактические значения. Приносим извинения, если пример домена имен и занятий не подходит для этой операции.

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

Сделав это, существует одно преобразование, которое может генерировать новую таблицу, содержащую указатели (er, внешние ключи)?

Реализация использует SQLite, если это имеет значение.

+1

Что вы пытаетесь достичь с этим? У вас много повторений в данных? Весь подход кажется немного странным для меня ... –

+0

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

+0

Да, много повторений в исходных данных. Подумайте миллионы строк, только тысячи (даже не десятки тысяч) разных значений. Я буду первым, кто укажет, что примерный домен, выбранный выше, не является применимым сразу ... – zvr

ответ

1

Предполагая, что ваши таблицы за последние/имен и профессий являются LNT, FnT и OCC, каждый из которых только две колонки, поле идентификатора и значения:

REPLACE INTO TheTable (last, first, occup) 
SELECT Lnt.id, Fnt.id, Occ.id 
FROM TheTable 
JOIN Lnt ON (last=Lnt.value) 
JOIN Fnt ON (first=Fnt.value) 
JOIN Occ ON (occup=Occ.value) 
Смежные вопросы