Отношения без атрибутов
Aheho спрашивает, нормально ли иметь таблицу с одним столбцом. Как насчет одного без столбцов, или, учитывая, что в большинстве современных "реляционных" СУБД это кажется трудным сделать, без атрибутов?
7 ответов
DEE и декартово произведение образуют моноид. На практике, если у вас есть оператор реляционного суммирования Date, вы используете DEE в качестве отношения группировки для получения итоговых сумм. Есть много других примеров, где DEE практически полезен, например, в функциональной настройке с оператором бинарного соединения вы получите n-ary join = foldr join dee
Существует ровно два отношения без атрибутов, одно с пустым кортежем и одно без. В Третьем Манифесте Дэйт и Дарвен (несколько) с юмором называют их TABLE_DEE
а также TABLE_DUM
(соответственно).
Они полезны в той мере, в которой они являются тождеством множества реляционных операторов, играющих роли, эквивалентные 1 и 0 в обычной алгебре.
Таблица с одним столбцом является набором - до тех пор, пока вам не нужно упорядочивать значения или связывать с ними какую-либо другую информацию, это выглядит нормально. Вы можете проверить членство в ней, и в основном это все, что вы можете сделать. (Если у вас нет UNIQUE
ограничение на один столбец, я думаю, вы также можете посчитать количество вхождений... мультимножество).
Но что, черт побери, будет означать таблица без столбцов (или связь без атрибутов) - или как это будет хорошо?!
"Есть ровно два отношения без атрибутов, одно с пустым кортежем, а другое без. В Третьем манифесте Дата и Дарвен (несколько) с юмором называют их TABLE_DEE и TABLE_DUM (соответственно).
Они полезны в той мере, в которой они являются тождеством множества реляционных операторов, играющих роли, эквивалентные 1 и 0 в обычной алгебре ".
И, конечно, они также играют роль "ИСТИНА" и "ЛОЖЬ" в булевой алгебре. Это означает, что они полезны, когда такие предложения, как "Магазин открыт" и "Тревога установлена" должны быть представлены в базе данных.
Следствием этого является то, что они также могут быть полезны в любом выражении реляционной алгебры для их свойств "действовать как IF/ELSE": присоединение к TABLE_DUM означает полное отсутствие кортежей из другого аргумента, присоединение к средствам TABLE_DEE сохраняя их всех. Таким образом, присоединение R к relvar S, который может быть равен либо TABLE_DEE, либо TABLE_DUM, является эквивалентом RA "если S, тогда R иначе FI", где FI обозначает пустое отношение.
Гектометр Так что отсутствие "реальных примеров" дошло до меня, и я старался изо всех сил. Возможно, удивительно, я попал на полпути туда!
cjs=> CREATE TABLE D (); СОЗДАТЬ СТОЛ cjs=> ВЫБЕРИТЕ СЧЕТЧИК (*) ОТ D; подсчитывать ------- 0 (1 ряд) cjs=> INSERT INTO D () VALUES (); ОШИБКА: синтаксическая ошибка в или около ")" ЛИНИЯ 1: ВСТАВЬТЕ В D () ЗНАЧЕНИЯ ();
Таблица с одним столбцом будет иметь смысл в качестве простого поиска. Допустим, у вас есть список строк, которые вы хотите отфильтровать для введенного пользователем текста. В этой таблице будут храниться слова, которые вы хотите отфильтровать.
Сложно увидеть полезность TABLE_DEE и TABLE_DUM с точки зрения базы данных SQL. В конце концов, не гарантируется, что ваш любимый поставщик БД позволяет вам создавать один или другой.
Также трудно увидеть полезность TABLE_DEE и TABLE_DUM в реляционной алгебре. Надо смотреть дальше этого. Чтобы понять, как эти константы могут ожить, рассмотрите реляционную алгебру, приведенную в правильную математическую форму, которая максимально приближена к булевой алгебре. D & D Algebra A - это шаг в этом направлении. Затем можно выразить классические операции реляционной алгебры через более фундаментальные, и эти две константы станут действительно полезными.