6
votes

PostgreSQL: différence entre contrainte de table et contrainte de colonne

Extrait FRO PGSQL 8.4 DOCS: "[...] Une contrainte de colonne n'est qu'une commodité notionnelle à utiliser lorsque la contrainte n'affecte qu'une colonne." Comment ce SQL valide est alors alors?


DROP TABLE IF EXISTS test;
CREATE TABLE test(
id integer CONSTRAINT PK_test PRIMARY KEY  CONSTRAINT nenull NOT NULL CHECK (id3>=id2) 
--the check constraint affects two columns none of which is id
,id2 integer 
, id3 integer
);


0 commentaires

4 Réponses :


6
votes

ailleurs dans les docs . . .

Nous disons que les deux premières contraintes sont des contraintes de colonne, alors que Le troisième est une contrainte de table parce qu'elle est écrite séparément à partir de n'importe quelle définition de colonne. Les contraintes de colonne peuvent également être écrites En tant que contraintes de table, tandis que l'inverse n'est pas nécessairement possible, puisque une contrainte de colonne est censée se référer à la seule colonne Il est attaché à. ( PostgreSQL n'applique pas cette règle , mais vous devrait le suivre si vous voulez que vos définitions de table fonctionnent avec d'autres Systèmes de base de données.)


0 commentaires

1
votes

Si la clé de la clé étrangère ou la principale contrainte de clé ne correspond à une seule colonne que vous avez le choix pour l'écrire de votre chemin ou comme ceci: xxx

mais si le PK ou le couvercle FK Plus d'une colonne, vous DO utiliser la "contrainte de table" car je vous ai montré.

Il n'y a plus de magie derrière celle-ci!


0 commentaires

6
votes

1) Contrainte de niveau de colonne est déclarée au moment de la création d'une table, mais la contrainte de niveau de table est créée après la création de table.

2) NON NULL La contrainte ne peut pas être créé au niveau de la table car toute contrainte donnera une vue logique à cette colonne particulière mais non null Attribuera à la structure de la table elle-même. C'est pourquoi nous pouvons voir pas NULL contrainte tout en décrivant le tableau, aucune autre contrainte ne sera vue.

3) clé primaire composite doit être déclarée au niveau de la table .

4) Toutes les contraintes peuvent être créées au niveau de la table mais pour Niveau de table Non NULL n'est pas autorisé.


0 commentaires

1
votes

NON NULL peut être attribué même après la création de la table à l'aide de la commande Alter Table. Je l'ai testé dans Oracle SQL + 10G . La syntaxe que j'ai utilisée est la suivante: Alter Table Nom de table Modifier la colonneName Notnull;

S'attendre à ce que vous vus sur cela.


0 commentaires