В реляционной алгебре проекция - это операция, которая принимает отношение и подмножество столбцов этого отношения и возвращает новое отношение. Новое отношение совпадает с отношением ввода, за исключением того, что оно содержит только указанные столбцы.
projection : Relation -> Column list -> Relation
В выходном отношении может быть меньше строк, чем во входном, поскольку несколько строк проецируются в одну и ту же строку, если их значения для указанных столбцов совпадают.
Теперь рассмотрим перевернутую операцию:
inverse_projection : Relation -> Column list -> Relation
Здесь у нас есть входное отношение, имена столбцов которого являются подмножеством столбцов в выходном отношении. Теперь нам нужно, чтобы Column list
были столбцами выходного отношения, которое теперь является расширенным набором столбцов в входном отношении. Это немного странно, потому что мы должны создать строки для выходного отношения, где некоторые значения столбца остаются неуказанными. Чисто с точки зрения реляционной алгебры это не имеет особого смысла. В конце концов, откуда поступают данные для этих неуказанных столбцов? Кроме того, в отличие от операции проецирования, отношения ввода и вывода всегда имеют одинаковое количество строк.
В SQL мы можем вставлять данные, указывая только некоторые столбцы таблицы. Неуказанные столбцы принимают значения по умолчанию.
INSERT INTO fruit (name, color) VALUES
('apple', 'red'),
('apple', 'green'),
('orange', 'orange');
Возвращаясь к реляционной алгебре, это больше похоже на взятие перекрестного произведения отношения ...
NAME, COLOR
apple, red
apple, green
orange, orange
с отношением ...
SCIENTIFIC_NAME, OFTEN_MISTAKEN_FOR_A_VEGETABLE, AVERAGE_GRAMS, CENTURY_DOMESTICATED
"", false, null, null
чем занимаемся так называемой перевернутой проекцией. Опять же, они концептуально похожи, но вы действительно берете перекрестный продукт со значениями по умолчанию.