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 90 91
| CREATE TABLE voiture
(
voiture_id smallint IDENTITY NOT NULL CONSTRAINT PKvoiture PRIMARY KEY
, nom varchar(32) NOT NULL
, immatriculation varchar(16) NOT NULL CONSTRAINT UQvoiture UNIQUE
)
GO
CREATE TABLE voiture_couleur
(
voiture_couleur_id tinyint IDENTITY NOT NULL CONSTRAINT PKvoiture_couleur PRIMARY KEY
, nom varchar(32) NOT NULL CONSTRAINT UQvoiture_couleur UNIQUE
)
GO
CREATE TABLE voiture_porte
(
voiture_porte_id tinyint IDENTITY NOT NULL CONSTRAINT PKvoiture_porte PRIMARY KEY
, nombre tinyint NOT NULL CONSTRAINT CHKvoiture_porte__nombre CHECK (nombre BETWEEN 2 AND 5)
)
GO
CREATE TABLE voiture_option
(
voiture_option_id tinyint IDENTITY NOT NULL CONSTRAINT PKvoiture_option PRIMARY KEY
, nom varchar(32) NOT NULL CONSTRAINT UQvoiture_option__nom UNIQUE
)
GO
CREATE TABLE voiture_caracteristique
(
voiture_caracteristique_id int IDENTITY NOT NULL CONSTRAINT PKvoiture_caracteristique PRIMARY KEY
, voiture_id smallint NOT NULL CONSTRAINT FKvoiture_caracteristique__voiture_id FOREIGN KEY (voiture_id) REFERENCES voiture
, voiture_couleur_id tinyint NOT NULL CONSTRAINT FKvoiture_caracteristique__voiture_couleur_id FOREIGN KEY (voiture_couleur_id) REFERENCES voiture_couleur
, voiture_porte_id tinyint NOT NULL CONSTRAINT FKvoiture_caracteristique__voiture_porte FOREIGN KEY (voiture_porte_id) REFERENCES voiture_porte
, voiture_option_id tinyint NOT NULL CONSTRAINT FKvoiture_caracteristique__voiture_option_id FOREIGN KEY (voiture_option_id) REFERENCES voiture_option
, commentaire varchar(128)
, CONSTRAINT UQvoiture_caracteristique__voiture_id__voiture_couleur_id__voiture_porte_id__voiture_option_id UNIQUE (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id)
)
GO
INSERT voiture (nom, immatriculation) VALUES ('voiture1', 'VOITURE1')
INSERT voiture (nom, immatriculation) VALUES ('voiture2', 'VOITURE2')
GO
INSERT voiture_couleur (nom) VALUES ('rouge')
INSERT voiture_couleur (nom) VALUES ('vert')
GO
INSERT voiture_porte (nombre) VALUES (3)
INSERT voiture_porte (nombre) VALUES (5)
GO
INSERT voiture_option (nom) VALUES ('clim')
INSERT voiture_option (nom) VALUES ('lecteur cd')
INSERT voiture_option (nom) VALUES ('toit ouvrant')
INSERT voiture_option (nom) VALUES ('gante')
INSERT voiture_option (nom) VALUES ('siege cuir')
GO
INSERT voiture_caracteristique (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id) VALUES (1, 1, 2, 1)
INSERT voiture_caracteristique (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id) VALUES (1, 1, 2, 2)
INSERT voiture_caracteristique (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id) VALUES (1, 1, 2, 3)
INSERT voiture_caracteristique (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id) VALUES (1, 1, 2, 4)
INSERT voiture_caracteristique (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id) VALUES (1, 1, 2, 5)
GO
INSERT voiture_caracteristique (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id) VALUES (1, 2, 1, 1)
INSERT voiture_caracteristique (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id) VALUES (1, 2, 1, 2)
INSERT voiture_caracteristique (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id) VALUES (1, 2, 1, 3)
INSERT voiture_caracteristique (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id) VALUES (1, 2, 1, 4)
INSERT voiture_caracteristique (voiture_id, voiture_couleur_id, voiture_porte_id, voiture_option_id) VALUES (1, 2, 1, 5)
GO
CREATE VIEW voiture_caracteristique_view
AS
SELECT V.voiture_id
, V.nom AS voiture_nom
, VCO.nom AS couleur_nom
, VP.nombre AS portes_nombre
, VO.nom AS option_nom
FROM dbo.voiture_caracteristique AS VCA
INNER JOIN dbo.voiture AS V
ON VCA.voiture_id = V.voiture_id
INNER JOIN dbo.voiture_couleur AS VCO
ON VCA.voiture_couleur_id = VCO.voiture_couleur_id
INNER JOIN dbo.voiture_porte AS VP
ON VCA.voiture_porte_id = VP.voiture_porte_id
INNER JOIN dbo.voiture_option AS VO
ON VCA.voiture_option_id = VO.voiture_option_id
GO |
Partager