2009-06-07 9 views
5

Aheo chiede se è ok to have a table with just one column. Che ne dici di uno senza colonne o, dato che questo sembra difficile da fare nella maggior parte dei moderni DBMS "relazionali", una relazione senza attributi?Relazioni senza attributi

+0

Che cosa significa? "Cos'è una relazione senza attributi?" Puoi dare qualche esempio del mondo reale? –

+0

Penso che il problema sia che non ci sono esempi reali ... – jerryjvl

+2

"CREATE TABLE dee()" seguito da "INSERT INTO DEE VALUES()" dovrebbe fare il trucco, se il DBMS è veramente relazionale. –

risposta

2

DEE e prodotto cartesiano formano un monoide. In pratica, se si dispone dell'operatore di riepilogo relazionale di Date, si utilizzerà DEE come relazione di raggruppamento per ottenere i totali parziali. Esistono molti altri esempi in cui il DEE è praticamente utile, ad es. in un'impostazione funzionale con un operatore di join binario si otterrebbe n-ary join = foldr join dee

3

Una tabella con una singola colonna è un insieme: se non si cura di ordinare i valori o di associare qualsiasi altra informazione con essi, sembra soddisfacente. Puoi verificare l'appartenenza al gruppo e in fondo è tutto ciò che puoi fare. (Se non si dispone di un vincolo UNIQUE sulla singola colonna, immagino si possa anche contare il numero di occorrenze ... un multiset).

Ma che diamine sarebbe una tabella senza colonne (o una relazione senza attributi) significa - o, come sarebbe una cosa buona ?!

+1

Che cosa significa e se non sarebbe utile sono due cose completamente diverse ... –

+0

Ed è per questo che faccio entrambe le domande (unita a una O, anche ;-) - se entrambe le domande hanno una buona risposta, io voglio sentirlo! -) –

+2

Ah, ora posso svelare il segreto. :-) Significa che la relazione (o "tabella") contiene l'unica tupla valida (o "riga") o non lo è. È il tipo di relazioni booleane. –

0

Hm. Quindi la mancanza di "esempi del mondo reale" mi ha colpito e ho fatto del mio meglio. Forse sorprendentemente, sono arrivato a metà strada!

 
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

Ho notato che alcuni sistemi di database non tollerano l'istruzione 'CREATE' no-column, e alcuni lo fanno ma non tollerano l'istruzione' INSERT' del valore zero. – seh

3

Esistono esattamente due relazioni senza attributi, una con una tupla vuota e l'altra senza. In The Third Manifesto, Date e Darwen (in qualche modo) li chiamano con umorismo TABLE_DEE e TABLE_DUM (rispettivamente).

Sono utili nella misura in cui sono l'identità di una varietà di operatori relazionali, che riproducono ruoli equivalenti a 1 e 0 nell'algebra ordinaria.

0

Una tabella con una singola colonna avrebbe senso come una semplice ricerca. Supponiamo che tu abbia un elenco di stringhe da filtrare per il testo inserito dall'utente. Quella tabella memorizzerebbe le parole che vorresti filtrare.

+0

Ma questa è una tabella con una colonna in più rispetto a quella senza colonne, che è l'interesse più interessante qui. Tuttavia, hai scoperto l'idea di un predicato in un mondo relazionale, che è buono. –

2

"Esistono esattamente due relazioni senza attributi, una con una tupla vuota e l'altra senza. In The Third Manifesto, Date e Darwen (un po ') li chiamano umilmente TABLE_DEE e TABLE_DUM (rispettivamente)

Sono utili nella misura in cui sono l'identità di una varietà di operatori relazionali, che svolgono ruoli equivalenti a 1 e 0 nell'algebra ordinaria. "

E naturalmente svolgono anche il ruolo di "VERO" e "FALSO" nell'algebra booleana. Significa che sono utili quando proposizioni come "Il negozio è aperto" e "L'allarme è impostato" devono essere rappresentati in un database.

Una conseguenza di questo è che possono anche essere utilmente impiegati in qualsiasi espressione dell'algebra relazionale per le loro proprietà di "agire come un IF/ELSE": unirsi a TABLE_DUM significa non conservare affatto tuple dall'altra argomento, unirsi a TABLE_DEE significa conservarli tutti. Quindi, unendo R a un S relvar che può essere uguale a TABLE_DEE o TABLE_DUM, è l'equivalente RA di "se S poi R else FI", con FI che sta per la relazione vuota.

0

È difficile visualizzare l'utilità di TABLE_DEE e TABLE_DUM dalla prospettiva del database SQL. Dopo tutto non è garantito che il tuo fornitore di db preferito ti permetta di crearne uno o l'altro.

È anche difficile vedere l'utilità di TABLE_DEE e TABLE_DUM nell'algebra relazionale. Bisogna guardare oltre.Per farti un'idea di come queste costanti possano prendere vita, considera l'algebra relazionale messa in una forma matematica appropriata, che sia il più vicino possibile all'algebra booleana. D & D Algebra A è un passo in questa direzione. Quindi, si possono esprimere le classiche operazioni di algebra relazionale tramite quelle più fondamentali e quelle due costanti diventano davvero utili.

Problemi correlati