Роми, так а откуда они у вас взялись?
Деталей вы не привели, так что могу только догадываться. У вас была таблица, вы захотели удалить дубликаты и сделали что-то типа:
INSERT INTO new_tab
SELECT *
FROM tab as t1, tab as t2
WHERE t1.id <> t2.id
AND t1.col1 = t2.col1
AND t1.col2 = t2.col2
...
Если я прав, измените условие t1.id <> t2.id на t1.id < t2.id и в таблице дубликатов не будет дубликатов.
Я понимаю, конечно, какой вопрос, такой ответ, но все же... Если это нужно сделать 1 раз, то к чему огород из составных ключей, и ссылок на старую таблицу? Если это нужно на постоянной основе, то что это вообще за жесть, откуда и зачем эта денормализация?
Пока выглядит так, что автор пошёл впиливать очередной костыль, вместо того, чтобы исправить проблему.
Vitsliputsli, Ну... да. Тут "каков вопрос, таков и ответ". Конечно, CHECK (id_1 < id_2) проще. С другой стороны, и решение в ответе, и это - плевок в сторону нормализации.
Суть в вопроса в том, что мне нужно для каждых двух записей в таблице получить определенное вычисляемое из этих записей значение, по которому потом делать ORDER BY например, и другие кошерные вещи.
Вычислять это всё на лету - это неподъемно будет.
Поэтому я и решил сделать отдельную таблицу, буду скажем раз в сутки запускать процесс чтобы считать и туда заливать все это.
Роми, если нужна сумма пары каждого значения с каждым, то агрегат или материализованное представление выглядят вполне логичным решением при большом кол-ве данных. Правда, при таких требоавниях, не вижу особого смысла в составном ключе с проверкой уникальности, достаточно один раз верно написать запрос подготовки агрегата или материализованного представления.
А что за бизнес-задача такая? Если не секрет. Точно ли, ее можно решить только так?
В общем, есть одна сущность - Value - и есть другая сущность, некое значение, полученное в результате нескольких побитовых операций над двумя разными Value, назовем это - Difference (условно)
Вот мне надо получить это Difference для КАЖДЫХ двух разных Value из таблицы, и сохранить это в отдельной таблице.
В принципе-то, ничего сверхъестественного - просто получить список отличий каждой записи от всех других, и записать это отдельным списком.
Я просто хочу это сделать наиболее элегантным способом ))
Роми, тогда вопросов нет, все норм. И, скорее всего, это уже не денормализация, это новая сущность, пусть и зависящая от других.
Насчет составного ключа для проверки уникальности, смотрите по задаче. В зависимости от того, как будете добавлять данные, эта проверка может быть и не лишней.