2009-06-07 10 views
5

Aheo pregunta si es ok to have a table with just one column. ¿Qué tal uno sin columnas, o, dado que esto parece difícil de hacer en la mayoría de los DBMS modernos "relacionales", una relación sin atributos?Relaciones sin atributos

+0

¿Qué significa eso? "¿Qué es una relación sin atributos?" ¿Puedes dar algún tipo de ejemplo del mundo real? –

+0

Creo que el problema es que no hay ejemplos del mundo real ... – jerryjvl

+2

"CREATE TABLE dee()" seguido de "INSERT INTO DEE VALUES()" debería hacer el truco, si su DBMS es realmente relacional. –

Respuesta

2

DEE y el producto cartesiano forman un monoide. En la práctica, si tiene el operador de resumen relacional de Date, usaría DEE como su relación de agrupación para obtener los grand-totals. Hay muchos otros ejemplos en los que DEE es prácticamente útil, p. en un entorno funcional con un operador de combinación binaria, obtendría n-ary join = foldr join dee

3

Una tabla con una sola columna es un conjunto: siempre que no le importe ordenar los valores o asociar cualquier otra información con ellos, parece correcto. Puede verificar su membresía, y básicamente eso es todo lo que puede hacer. (Si no tiene una restricción UNIQUE en la columna individual, supongo que también podría contar el número de ocurrencias ... un multiset).

Pero, ¿qué en llamas sería una tabla sin columnas (o una relación sin atributos) significa - o, ¿cómo sería algo bueno ?!

+1

Lo que significa y si sería o no algo bueno son dos cosas completamente diferentes ... –

+0

Y es por eso que hago ambas preguntas (acompañado por un quirófano también ;-) - si alguna de las preguntas tiene una buena respuesta, quiero escucharlo! -) –

+2

Ah, ahora tengo que revelar el secreto. :-) Significa que la relación (o "tabla") contiene una sola tupla válida (o "fila") o no. Es el tipo de relaciones booleanas. –

0

Hm. Entonces me llegó la falta de "ejemplos del mundo real" y lo intenté lo mejor posible. ¡Quizás sorprendentemente, llegué a mitad de camino!

 
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(); 
+0

Me he dado cuenta de que algunos sistemas de bases de datos no tolerarán la instrucción 'CREATE' sin columnas, y algunos lo hacen, pero luego no toleran la declaración' INSERT' de valor cero. – seh

3

Existen exactamente dos relaciones sin atributos, una con una tupla vacía y otra sin ella. En The Third Manifesto, Date y Darwen (un tanto) los nombran jocosamente TABLE_DEE y TABLE_DUM (respectivamente).

Son útiles en la medida en que son la identidad de una variedad de operadores relacionales, jugando papeles equivalentes a 1 y 0 en álgebra ordinaria.

0

Una tabla con una sola columna tendría sentido como una simple búsqueda. Supongamos que tiene una lista de cadenas sobre las que desea filtrar para el texto ingresado por el usuario. Esa tabla almacenaría las palabras que quisiera filtrar.

+0

Pero esa es una tabla con una columna más que la que no tiene columnas, que es la de interés aquí. Aún así, has descubierto la idea de un predicado en un mundo relacional, que es bueno. –

2

"Hay exactamente dos relaciones sin atributos, una con una tupla vacía y la otra sin. En The Third Manifesto, Date y Darwen (un tanto) los nombran humorísticamente TABLE_DEE y TABLE_DUM (respectivamente).

Son útiles en la medida en que son la identidad de una variedad de operadores relacionales, jugando un papel equivalente a 1 y 0 en álgebra ordinaria. "

Y, por supuesto, también desempeñan el papel de "VERDADERO" y "FALSO" en el álgebra de Boole. Lo que significa que son útiles cuando las proposiciones tales como "La tienda está abierta" y "La alarma está configurada" deben representarse en una base de datos.

Una consecuencia de esto es que también se pueden emplear de forma útil en cualquier expresión del álgebra relacional para sus propiedades de "actuar como IF/ELSE": unirse a TABLE_DUM significa no retener tuplas en absoluto del otro argumento, unirse a TABLE_DEE significa retenerlos a todos. Entonces, unir R a un relvar S que puede ser igual a TABLE_DEE o TABLE_DUM, es el equivalente de RA de "si S luego R else FI", y FI significa la relación vacía.

0

Es difícil ver la utilidad de TABLE_DEE y TABLE_DUM desde la perspectiva de la base de datos SQL. Después de todo, no está garantizado que su proveedor de db favorito le permita crear uno u otro.

También es difícil ver la utilidad de TABLE_DEE y TABLE_DUM en álgebra relacional. Uno tiene que mirar más allá de eso.Para darte un sabor de cómo estas constantes pueden cobrar vida, considera el álgebra relacional puesta en forma matemática adecuada, que sea lo más cercana posible al álgebra de Boole. D & D Algebra A es un paso en esta dirección. Entonces, uno puede expresar operaciones clásicas de álgebra relacional a través de otras más fundamentales y esas dos constantes se vuelven realmente útiles.

Cuestiones relacionadas