2009-06-07 6 views
5

Aheo demande s'il s'agit de ok to have a table with just one column. Que diriez-vous d'un sans colonnes, ou, étant donné que cela semble difficile à faire dans la plupart des SGBD "relationnels" modernes, une relation sans attributs?Relations sans attribut

+0

Qu'est-ce que cela signifie? "Qu'est-ce qu'une relation sans attributs?" Pouvez-vous donner un exemple concret? –

+0

Je pense que le problème est qu'il n'y a pas d'exemples concrets ... – jerryjvl

+2

"CREATE TABLE dee()" suivi de "INSERT INTO DEE VALUES()" devrait faire l'affaire, si votre SGBD est vraiment relationnel. –

Répondre

2

DEE et le produit cartésien forment un monoïde. En pratique, si vous disposez de l'opérateur de résumé relationnel de Date, vous utiliseriez DEE comme relation de regroupement pour obtenir des totaux généraux. Il existe de nombreux autres exemples où le DEE est pratiquement utile, par ex. Dans un paramètre fonctionnel avec un opérateur de jointure binaire, vous obtiendrez n-aire join = foldr rejoindre dee

3

Une table avec une seule colonne est un ensemble - tant que vous ne vous souciez pas de commander les valeurs ou d'y associer d'autres informations, cela semble correct. Vous pouvez vérifier l'adhésion, et c'est tout ce que vous pouvez faire. (Si vous n'avez pas de contrainte UNIQUE sur la colonne, je suppose que vous pouvez également compter le nombre d'occurrences ... un multiset).

Mais ce qui en flammes serait une table sans colonnes (ou une relation sans attributs) signifie - ou, comment serait-il bon ?!

+1

Qu'est-ce que cela signifie et si ce serait bien ou non deux choses très différentes ... –

+0

Et c'est pourquoi je pose les deux questions (rejoint par un OU, aussi ;-) - si l'une ou l'autre question a une bonne réponse, je veux l'entendre! -) –

+2

Ah, maintenant je dois révéler le secret. :-) Cela signifie que la relation (ou "table") contient soit le seul tuple valide (ou "ligne"), soit ce n'est pas le cas. C'est le type booléen des relations. –

0

Hm. Donc, le manque d'exemples concrets est arrivé à moi, et j'ai fait de mon mieux. Peut-être étonnamment, je suis arrivé à mi-chemin!

 
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

J'ai remarqué que certains systèmes de bases de données ne toléreraient pas l'instruction 'CREATE' sans colonne, et certains n'acceptent pas l'instruction' INSERT' à valeur nulle. – seh

3

Il existe exactement deux relations sans attributs, une avec un n-uplet vide et une sans. Dans The Third Manifesto, Date et Darwen (un peu) avec humour les nommer TABLE_DEE et TABLE_DUM (respectivement).

Ils sont utiles dans la mesure où ils sont l'identité d'une variété d'opérateurs relationnels, jouant des rôles équivalents à 1 et 0 en algèbre ordinaire.

0

Une table avec une seule colonne aurait du sens comme simple recherche. Disons que vous avez une liste de chaînes que vous souhaitez filtrer pour le texte entré par l'utilisateur. Cette table stocke les mots que vous souhaitez filtrer.

+0

Mais c'est une table avec une colonne de plus que celle sans colonnes, ce qui est l'intérêt ici. Pourtant, vous avez découvert l'idée d'un prédicat dans un monde relationnel, ce qui est bien. –

2

"Il existe exactement deux relations sans attributs, une avec un n-uplet vide et une sans. Date et Darwen (un peu) avec humour les appellent TABLE_DEE et TABLE_DUM (respectivement)

Ils sont utiles dans la mesure où ils sont l'identité d'une variété d'opérateurs relationnels, jouant un rôle équivalent à 1 et 0 en algèbre ordinaire. "

Et bien sûr, ils jouent aussi le rôle de "VRAI" et "FAUX" dans l'algèbre booléenne. Cela signifie qu'ils sont utiles lorsque des propositions telles que "Le magasin est ouvert" et "L'alarme est définie" doivent être représentées dans une base de données. Une conséquence de ceci est qu'ils peuvent également être utilement employés dans n'importe quelle expression de l'algèbre relationnelle pour leurs propriétés à "agir comme un IF/ELSE": joindre à TABLE_DUM signifie ne retenir aucun tuples de l'autre argument, joindre à TABLE_DEE signifie les conserver tous. Donc, en joignant R à un relvar S qui peut être égal à TABLE_DEE ou TABLE_DUM, est l'équivalent RA de "si S puis R autre FI", avec FI représentant la relation vide.

0

Il est difficile de voir l'utilité de TABLE_DEE et TABLE_DUM à partir de la perspective SQL Database. Après tout, il n'est pas garanti que votre fournisseur db préféré vous permette de créer l'un ou l'autre.

Il est également difficile de voir l'utilité de TABLE_DEE et TABLE_DUM dans l'algèbre relationnelle. Il faut regarder au-delà de ça.Pour vous donner une idée de la façon dont ces constantes peuvent prendre vie, considérez l'algèbre relationnelle mise en forme mathématique appropriée, c'est-à-dire aussi proche que possible de l'algèbre booléenne. D & D L'algèbre A est un pas dans cette direction. Ensuite, on peut exprimer des opérations classiques d'algèbre relationnelle via des opérations plus fondamentales et ces deux constantes deviennent vraiment pratiques.

Questions connexes