Отношения без атрибутов

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 - это шаг в этом направлении. Затем можно выразить классические операции реляционной алгебры через более фундаментальные, и эти две константы станут действительно полезными.

Другие вопросы по тегам