Bonjour,
Ma question peut sembler idiote mais je ne trouve pas la réponse :
Une vue ne possède pas de clé primaire : vrai ou faux ? Est-ce que l'affirmation contraire est abérante ? Si oui, pourquoi ?
Merci à tous.
Bonjour,
Ma question peut sembler idiote mais je ne trouve pas la réponse :
Une vue ne possède pas de clé primaire : vrai ou faux ? Est-ce que l'affirmation contraire est abérante ? Si oui, pourquoi ?
Merci à tous.
Une vue n'est que le résultat d'une requete. Les données visualisées ne sont pas modifiables directement. Donc la notion de clé primaire pour une vue est inutile. Ceci dit, tu peux y inserer les différentes clés primaires qui te seront utiles pour d'eventuelles modifications (dans les tables et non dans les vues) directement dans ta requete de creation de vue
ok j'ai bien compris.
super, je te remercie (:
FAUX !!!!Les données visualisées ne sont pas modifiables directement.
Démonstration :
Lisez l'article que j'ai écrit sur le sujet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 CREATE TABLE T_PAYS (PAYS_ID INT NOT NULL PRIMARY KEY, PAYS_NOM VARCHAR(32), PAYS_LANGUE VARCHAR(16)) INSERT INTO T_PAYS VALUES (1, 'France', 'Français') INSERT INTO T_PAYS VALUES (2, 'Belgique', 'Français') INSERT INTO T_PAYS VALUES (3, 'Italie', 'Italien') SELECT * FROM T_PAYS PAYS_ID PAYS_NOM PAYS_LANGUE ----------- -------------------------------- ---------------- 1 France Français 2 Belgique Français 3 Italie Italien CREATE VIEW V_PAYS_FRANCOPHONES AS SELECT PAYS_ID, PAYS_NOM, PAYS_LANGUE FROM T_PAYS WHERE PAYS_LANGUE = 'Français' SELECT * FROM V_PAYS_FRANCOPHONES PAYS_ID PAYS_NOM PAYS_LANGUE ----------- -------------------------------- ---------------- 1 France Français 2 Belgique Français INSERT INTO V_PAYS_FRANCOPHONES VALUES (4, 'Espagne', 'Espagnol') SELECT * FROM T_PAYS PAYS_ID PAYS_NOM PAYS_LANGUE ----------- -------------------------------- ---------------- 1 France Français 2 Belgique Français 3 Italie Italien 4 Espagne Espagnol SELECT * FROM V_PAYS_FRANCOPHONES PAYS_ID PAYS_NOM PAYS_LANGUE ----------- -------------------------------- ---------------- 1 France Français 2 Belgique Français INSERT INTO V_PAYS_FRANCOPHONES VALUES (5, 'Suisse', 'Français') SELECT * FROM T_PAYS PAYS_ID PAYS_NOM PAYS_LANGUE ----------- -------------------------------- ---------------- 1 France Français 2 Belgique Français 3 Italie Italien 4 Espagne Espagnol 5 Suisse Français SELECT * FROM V_PAYS_FRANCOPHONES PAYS_ID PAYS_NOM PAYS_LANGUE ----------- -------------------------------- ---------------- 1 France Français 2 Belgique Français 5 Suisse Français UPDATE V_PAYS_FRANCOPHONES SET PAYS_LANGUE = 'Allemand' WHERE PAYS_ID = 5 SELECT * FROM T_PAYS PAYS_ID PAYS_NOM PAYS_LANGUE ----------- -------------------------------- ---------------- 1 France Français 2 Belgique Français 3 Italie Italien 4 Espagne Espagnol 5 Suisse Allemand SELECT * FROM V_PAYS_FRANCOPHONES PAYS_ID PAYS_NOM PAYS_LANGUE ----------- -------------------------------- ---------------- 1 France Français 2 Belgique Français
http://sqlpro.developpez.com/cours/s...age=partie2#L8
A +
Ca depend des Serveurs SGBD (postGreSQL ne l'autorise pas sans création de règles), avec des contraintes super fortes pour la pluspart (qui s'apparente plus a des alias de tables). Mais effectivement dans des cas super precis on peut le faire. Cependant dans tous les cas, ce sont les contraintes affectées a la table qui sont utilisés, les verrous sont posés sur la table et non sur la vue.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager