Отношения без атрибутов - PullRequest
5 голосов
/ 07 июня 2009

Aheo спрашивает, нормально ли иметь таблицу с одним столбцом . Как насчет одного без столбцов, или, учитывая, что в большинстве современных «реляционных» СУБД это кажется трудным сделать, без атрибутов?

Ответы [ 7 ]

3 голосов
/ 07 июня 2009

Существует ровно два отношения без атрибутов, одно с пустым кортежем и одно без. В Третьем манифесте Дата и Дарвен (несколько) с юмором называют их TABLE_DEE и TABLE_DUM (соответственно).

Они полезны в той степени, в которой они являются тождеством множества операторов отношений, играющих роли, эквивалентные 1 и 0 в обычной алгебре.

3 голосов
/ 07 июня 2009

Таблица с одним столбцом является набором - до тех пор, пока вам не нужно упорядочивать значения или связывать с ними какую-либо другую информацию, кажется, это нормально. Вы можете проверить членство в ней, и в основном это все, что вы можете сделать. (Если у вас нет ограничения UNIQUE на один столбец, я думаю, вы также можете посчитать количество вхождений ... мультимножество).

Но что, черт побери, будет таблица без столбцов (или отношение без атрибутов) означает - или как это будет хорошо?!

2 голосов
/ 15 марта 2010

"Существует ровно два отношения без атрибутов, одно с пустым кортежем, а другое без. В Третьем манифесте Дата и Дарвен (несколько) с юмором называют их TABLE_DEE и TABLE_DUM (соответственно).

Они полезны в той мере, в которой они являются тождеством множества операторов отношений, играющих роли, эквивалентные 1 и 0 в обычной алгебре. "

И, конечно, они также играют роль «ИСТИНА» и «ЛОЖЬ» в булевой алгебре. Это означает, что они полезны, когда такие предложения, как «Магазин открыт» и «Тревога установлена» должны быть представлены в базе данных.

Следствием этого является то, что они также могут быть полезны в любом выражении реляционной алгебры для их свойств «действовать как IF / ELSE»: присоединение к TABLE_DUM означает полное отсутствие кортежей из другого аргумента, присоединение TABLE_DEE означает сохранение их всех. Таким образом, присоединение R к relvar S, который может быть равен либо TABLE_DEE, либо TABLE_DUM, является эквивалентом RA "if S, тогда R else FI", где FI обозначает пустое отношение.

2 голосов
/ 16 сентября 2009

DEE и декартово произведение образуют моноид. На практике, если у вас есть оператор реляционного суммирования Date, вы использовали бы DEE в качестве отношения группировки для получения общих итогов. Есть много других примеров, где DEE практически полезен, например, в функциональной настройке с бинарным оператором соединения вы получите n-арное соединение = сложение соединения ди

0 голосов
/ 27 августа 2010

Сложно увидеть полезность TABLE_DEE и TABLE_DUM с точки зрения базы данных SQL. В конце концов, не гарантируется, что ваш любимый поставщик БД позволяет вам создавать одно или другое.

Также трудно увидеть полезность TABLE_DEE и TABLE_DUM в реляционной алгебре. Надо смотреть дальше этого. Чтобы понять, как эти константы могут ожить, рассмотрите реляционную алгебру, приведенную в правильную математическую форму, которая максимально приближена к булевой алгебре. D & D Algebra A - это шаг в этом направлении. Затем можно выразить классические операции реляционной алгебры через более фундаментальные, и эти две константы станут действительно полезными.

0 голосов
/ 12 июня 2009

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

0 голосов
/ 07 июня 2009

Hm. Так что отсутствие «реальных примеров» дошло до меня, и я старался изо всех сил. Возможно, удивительно, я попал туда на полпути!

cjs=> CREATE TABLE D ();
CREATE TABLE
cjs=> SELECT COUNT (*) FROM D;
 count 
-------
     0
(1 row)

cjs=> INSERT INTO D () VALUES ();
ERROR:  syntax error at or near ")"
LINE 1: INSERT INTO D () VALUES ();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...