Ave Ordigil,
Aucune possibilité de changer de mot de passe ou quoi que ce soit n'est offerte…
Sinon, je teste et je reteste et je rereteste le code SQL...
(a) Faites simple, mais pas plus simple ! (A. Einstein)
(b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)
__________________________________
Bases de données relationnelles et normalisation : de la première à la sixième forme normale
Modéliser les données avec MySQL Workbench
Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
J'ai trouvé la réponse pour votre accès au site WEB…
C'est que je n'ai pas encore effectué la mise à jour du serveur WEB avec l'encryption des mots de passe
Avez-vous regardé mes 2 nouvelles tables dans "DZINDZIO_TRUCKS_MANAGEMENT" ???
Les mots de passe ne sont pas simplement des "HASH" car les 'HASH' n'apportent aucune sécurité pour les mots de passe. Ce sont des 'HASH' encryptés. Si je n'ai pas fait d'erreurs évidemment.
Il ne faut pas publier l'information de ces 2 tables car elles contiennent de l'info réel
Je vais mettre à jour le site WEB plus tard aujourd'hui. La seule chose de changée est l'accès sécurisé au site. Je n'ai pas encore eu le temps de faire les formulaires donc encore accès directement aux tables, bien que les vues sont elles aussi incluses sur le site web.
(a) Faites simple, mais pas plus simple ! (A. Einstein)
(b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)
__________________________________
Bases de données relationnelles et normalisation : de la première à la sixième forme normale
Modéliser les données avec MySQL Workbench
Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
J’ai corrigé des erreurs traînant dans le trigger COMPOSANT_RECOUVREMENT_TR dédié aux inserts dans la table COMPOSANT_AFFECTATION.
Pour le jour où vous aurez besoin de clarifier des points particuliers ou prendre en compte de nouvelles règles, voici les tâches que l’on effectue avec le trigger :
1) Remarque préliminaire : dans le codage de l’INSERT, n’affecter qu’un seul composant à la fois à un camion (INSERT mono-ligne). Pour pouvoir faire un INSERT multi-affectations il faudra enrichir le trigger d’un curseur permettant de traiter ligne par ligne.
2) On vérifie que la table INSERTED n’est pas vide. Elle l’est si le camion ou le composant concernés sont inconnus.
3) La table INSERTED n’est pas vide. On vérifie que la localisation (camion ou local) est connue, et on vérifie que le composant est connu lui aussi.
4) Après ces préliminaires, on traite de la bilocation ; on vérifie que le composant ne sera pas au même instant sur deux camions (ou sur un camion et dans un local).
5) On vérifie qu’un camion aura au plus un moteur, une transmissions, 2 différentiels. Les locaux ne sont pas concernés.
Le trigger sera à enrichir en fonction des besoins qui se manifesteront (cas notamment des différentiels et de leur type, forward, rear).
Code actuel de création du trigger :
CREATE TRIGGER COMPOSANT_RECOUVREMENT_TR ON COMPOSANT_AFFECTATION INSTEAD OF INSERT AS BEGIN -------- pour debug : ---------SELECT ' ===COMPOSANT_RECOUVREMENT_TR, nouvelle entrée ======================' ; DECLARE @N AS INT ; DECLARE @Engueulade AS VARCHAR(96) ; DECLARE @MaxAutorises AS INT ; ----------- nb maxi de composants sur un camion en fonction du type du composant DECLARE @Type AS VARCHAR(16) ; ----------- type du composant (moteur, transmission, différentiel) DECLARE @NbDoublons AS INT ; declare @nbTuples as INT ; declare @DateAchat as DATE ; declare @ComposantInstallationDate as DATE ; declare @ComposantDesinstallationDate as DATE ; DECLARE @inserted TABLE ( CamionId INT , CamionVIN VARCHAR(48) , ComposantId INT , ComposantTypeId INT , ComposantTypeLibelle VARCHAR(48) , ComposantQteMax INT , ComposantInstallationDate DATE DEFAULT '9999-12-31' , ComposantDesInstallationDate DATE DEFAULT '9999-12-31' ); ------------------------------------------------------------------ --------------------------------------------------------------------------- --------pour debug : ---------------SELECT '======== 1re partie (contrôles préliminaires) =========' ; ------------------------------------------------------------------------------------------------- -- 1ere partie : contrôles préliminaires -- -- Si INSERTED est vide, c'est que la localisation et/ou -- le composant n'existent pas dans la base de données. ------------------------------------------------------------------ -------pour debug : -------SET @N = (SELECT COUNT(*) from INSERTED) ; IF (SELECT COUNT(*) from INSERTED) = 0 BEGIN SET @Engueulade = 'Affectation de composant(s) : composant et/ou localisation manquants' SELECT @Engueulade AS Engueulons -------- RAISERROR (@Engueulade,16,1) -- state = 16 pour bloquer RAISERROR (@Engueulade,0,1) -- state = 0 pour les tests RETURN END --------------------------------------- -- INSERTED n'est pas vide -- si les dates d'installation/désinstallation sont omises, -- on les force à '9999-12-31' --------------------------------------- ----------pour debug : -------SELECT '' as INSERTED, * FROM INSERTED ; -------------------------------------------------------------------------------------------------------------- -- La table INSERTED contient la ligne (voire > 1 si l'insert est ensembliste) comportant -- seulement les données propres à l'affectation d'un composant à un camion (ou à un local), -- c'est-à-dire les dates d'installation et de désinstallation (9999-12-31 si date non renseignée). -- On la recopie dans la table temporaire @inserted en l'enrichissant avec le numéro de série -- du camion, et impérativement le contenu de ComposantQteMax (table COMPOSANT_TYPE), qui permet de -- connaître le nombre maximum de composants du type du composant (moteur, transmission, différentiel). -- --- le chargement de la table @inserted est l'union d'un SELECT dédié aux camions et d'un -- SELECT dédié aux locaux, car le composant est affecté soit à un camion soit à un local. --- -------------------------------------------------------------------------------------------------------------- INSERT INTO @inserted (CamionId, CamionVIN, ComposantId , ComposantTypeId, ComposantTypeLibelle, ComposantQteMax , ComposantInstallationDate, ComposantDesInstallationDate) SELECT x.LocalisationId, t.CamionVIN, x.ComposantId, y.ComposantTypeId, z.ComposantTypeLibelle, z.ComposantQteMax , COALESCE(x.ComposantInstallationDate, '9999-12-31'), COALESCE(x.ComposantDesInstallationDate, '9999-12-31') FROM INSERTED AS x JOIN COMPOSANT AS y ON x.ComposantId = y.ComposantId JOIN COMPOSANT_TYPE AS z ON y.ComposantTypeId = z.ComposantTypeId JOIN CAMION AS t ON x.LocalisationId = t.CamionId UNION SELECT x.LocalisationId, '/', x.ComposantId, y.ComposantTypeId, z.ComposantTypeLibelle, z.ComposantQteMax , COALESCE(x.ComposantInstallationDate, '9999-12-31'), COALESCE(x.ComposantDesInstallationDate, '9999-12-31') FROM INSERTED AS x JOIN COMPOSANT AS y ON x.ComposantId = y.ComposantId JOIN COMPOSANT_TYPE AS z ON y.ComposantTypeId = z.ComposantTypeId JOIN LOCAL AS t ON x.LocalisationId = t.LocalisationId ; /*-----------pour debug--------------------------- SELECT '' AS '@inserted', * FROM @inserted ; select '' as '@ComposantInstallationDate', ComposantInstallationDate from @inserted ; select '' as '@ComposantDesinstallationDate', ComposantDesInstallationDate from @inserted ; */-------------------------------------- ----------------------------------------------------------------------------------------------------------------- -- Si l'INSERT fait référence à un camion ou à un local inconnus, alors l'attribut LocalisationId est marqué NULL, -- donc on rouspète et on sort. ------------------------------------------------------------------------------------------------------------------ -------pour debug -------SET @N = (SELECT COUNT(*) FROM INSERTED WHERE LocalisationId IS NULL) ; -------pour debug---------SELECT 'LocalisationId marqué NULL => @N = ' + cast( @N as varchar) ; IF (SELECT COUNT(*) FROM INSERTED WHERE LocalisationId IS NULL) > 0 BEGIN SET @Engueulade = 'Affectation de composant(s) : localisation manquante (camion ou local)' SELECT @Engueulade AS Engueulons, * FROM INSERTED -------- RAISERROR (@Engueulade,16,1) -- state = 16 pour bloquer RAISERROR (@Engueulade,0,1) -- state = 0 pour les tests RETURN END ------------------------------------------------------------------------------------------- -- Si l'INSERT fait référence à un composant inconnu, alors l'attribut ComposantId est marqué NULL, -- donc on rouspète et on sort. ------------------------------------------------------------------------------------------- -------pour debug -------SET @N = (SELECT COUNT(*) FROM INSERTED WHERE ComposantId IS NULL) ; -------pour debug -------SELECT 'ComposantId marqué NULL => @N = ' + cast( @N as varchar) ; IF (SELECT COUNT(*) FROM INSERTED WHERE ComposantId IS NULL) > 0 BEGIN SET @Engueulade = 'Affectation de composant(s) : composant manquant' SELECT @Engueulade AS Engueulons, * FROM INSERTED -------- RAISERROR (@Engueulade,16,1) -- state = 16 pour bloquer RAISERROR (@Engueulade,0,1) -- state = 0 pour les tests RETURN END --------------------------------------------------------------------------- --------------------------------------------------------------------------- ---------pour debug : --------------SELECT '======== 2e partie (bilocation) =========' ; ------------------------------------------------------------------------------------------------- -- 2e partie : -- -- contrôle de la bilocation. Un composant (moteur, transmission, différentiel) -- ne peut pas être au même instant sur deux camions (ou sur un camion et dans un local), -- sauf le jour où on désinstalle le composant pour l'installer sur un autre camion -- (ou dans un local). -- -- Noter que si la date d'installation est omise, on l'a forcée à '9999-12-31', -- mais elle doit être interprétée comme antérieure à une date de désinstallation ---------------------------------------------------------------------------------------------------- -----pour debug : --------------SELECT '' AS 'ComposantInstallationDate (from @inserted)', (select ComposantInstallationDate FROM @inserted) ; -----pour debug : --------------SELECT '' AS 'ComposantDesinstallationDate (from @inserted)', (select ComposantDesinstallationDate FROM @inserted) ; SET @nbTuples = ( SELECT COUNT(*) FROM INSERTED AS x JOIN COMPOSANT_AFFECTATION AS y ON x.ComposantId = y.ComposantId AND x.ComposantInstallationDate < y.ComposantDesInstallationDate AND (x.ComposantDesInstallationDate >= y.ComposantInstallationDate OR y.ComposantInstallationDate = '9999-12-31') ) ; -------pour debug : --------------SELECT '' AS '@nbtuples (@@Rowcount)', @nbTuples ; IF @nbTuples > 0 BEGIN SELECT 'Affectation de composant(s) : pas le même composant à deux endroits en même temps !' AS Engueulons, * FROM INSERTED -- RAISERROR ('Affectation de composant(s) : recouvrement de période !',16,1) -- state = 16 pour bloquer RAISERROR ('Affectation de composant(s) : pas le même composant à deux endroits en même temps !',0,1) -- state = 0 pour les tests RETURN END --------------------------------------------------------------------------------------------------------------------- -- 3e partie - Nb maximum de composants sur un camion, en fonction du type de composant -- -- Un camion a au plus un moteur, une transmissions, 2 différentiels. Les locaux ne sont pas concernés. ---------------------------------------------------------------------------------------------------------------------- --------pour debug : -----SELECT '======== 2e partie (nb max de composants sur un camion par type de composant) =========' ; --------pour debug : -----SET @N = (SELECT COUNT(*) FROM @inserted) ; IF (SELECT COUNT(*) FROM @inserted) < 2 -- pour les copies de la table, inutile de contrôler (sinon plantum...) BEGIN ------- pour debug : ----select 'on contrôle le max de composants sur un camion en fonction du type de composant' ; SET @MaxAutorises = (SELECT ComposantQteMax FROM @inserted) ; SET @Type = (SELECT ComposantTypeLibelle FROM @inserted) ; END SET @NbDoublons = ( SELECT COUNT(*) FROM @inserted AS x JOIN COMPOSANT_AFFECTATION AS y ON x.CamionId = y.LocalisationId JOIN COMPOSANT AS z ON y.ComposantId = z.ComposantId AND x.ComposantTypeId = z.ComposantTypeId WHERE x.ComposantInstallationDate < y.ComposantDesInstallationDate AND (x.ComposantDesInstallationDate >= y.ComposantInstallationDate OR y.ComposantInstallationDate = '9999-12-31') AND NOT EXISTS (SELECT * FROM LOCAL as w where y.LocalisationId = w.LocalisationId) ) ; --------------------SELECT '@MaxAutorises = ', @MaxAutorises, '@NbDoublons = ', @NbDoublons, '@Type = ' + @Type ; if @NbDoublons > 0 AND @NbDoublons >= @MaxAutorises BEGIN SET @Engueulade = 'Un camion, ' + cast(@MaxAutorises as varchar(2)) + ' composant(s) (type = ' + @Type + ') au maximum !' ; SELECT @Engueulade AS Engueulade, * FROM INSERTED -- RAISERROR (@Engueulade,16,1) -- state = 16 pour bloquer RAISERROR (@Engueulade,0,1) -- state = 0 pour les tests RETURN END -- Tout va bien ! on effectue l'INSERT dans la table COMPOSANT_AFFECTATION. ------pour debug : ---SELECT '' as '@ComposantInstallationDate', @ComposantInstallationDate ; ------pour debug : ---SELECT '' as '@ComposantDesnstallationDate', @ComposantDesinstallationDate ; ------pour debug : ---SELECT '' as 'COALESCE(ComposantInstallationDate, ''9999-12-31'') (INSERTED)', COALESCE(ComposantInstallationDate, '9999-12-31') from INSERTED ; ------pour debug : ---SELECT '' as 'COALESCE(ComposantDesInstallationDate, ''9999-12-31'') (INSERTED)', COALESCE(ComposantDesInstallationDate, '9999-12-31') from INSERTED ; INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId , COALESCE(ComposantInstallationDate, '9999-12-31') , COALESCE(ComposantDesInstallationDate, '9999-12-31') , LocalisationId FROM INSERTED ; -------pour debug : ----SELECT '' AS 'inside', * FROM COMPOSANT_AFFECTATION ; END GO
(a) Faites simple, mais pas plus simple ! (A. Einstein)
(b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)
__________________________________
Bases de données relationnelles et normalisation : de la première à la sixième forme normale
Modéliser les données avec MySQL Workbench
Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
Désolé d'être tard. Nous avons un fuseau horaire différent et j'ai été très occupé aujourd'hui.
Les petites anomalies et omissions font partie du processus normal de développement .
Bon vous avez à nouveau accès au site "WEB". Il n'y a pas beaucoup de nouveau pour l'instant car j'ai travaillé sur la sécurisation des login et de l'administration des authorisations. Nous avons encore accès directement à toutes les tables car ça me permet de vérifier si tout fonctionne correctement sur SQL Server. Il y a des petites anomalies et des petites choses que je trouve étranges mais je vais attendre que vous mettiez "DZINDZIO_TRUCKS_MANAGEMENT" à jour avant de de vous en parler car vous avez peut-être déjà corrigé...
Un jeu d’essai (à compléter) pour tester l’affectation des moteurs via le trigger COMPOSANT_RECOUVREMENT_TR :
=>BEGIN TRANSACTION ; ----------- ROLLBACK en fin de transaction -------------- DELETE FROM COMPOSANT_AFFECTATION ; -------------------------------------------------------------------------------- -- Affectations successives d'un moteur à des camions ou à des locaux (garage, vente....) --------------------------------------------------------------------------------- select * from local ; select * from temp.dbo.moteur ; --/* --------------------------------------------- -- moteur s01 dans local loc01 --------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2012-07-01', '9999-12-31' , (SELECT LocalisationId FROM LOCAL WHERE LocalCode = 'loc01') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; SELECT '' as 'moteur s01 dans local loc01', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate --*/ --/* ------------------------------------------------------------ -- tentative d'affectation du moteur s01 au camion vin01 : -- échec, car le moteur ne peut pas être en même temps -- dans un local et sur un camion en vadrouille. Il faudra -- commencer par sortir le moteur du local (le garage), -- le "désinstaller" avant. ------------------------------------------------------------ INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = 'vin01'), '9999-12-31' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin01') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; SELECT '' as 'tentative illégale loc01 to vin01', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate --*/ --/* -------------------------------------------------------------------------- -- sortir le moteur s01 du local -------------------------------------------------------------------------- UPDATE COMPOSANT_AFFECTATION SET ComposantDesInstallationDate = '2012-07-02' WHERE LocalisationId = (SELECT LocalisationId FROM LOCAL WHERE LocalCode = 'loc01') AND ComposantInstallationDate = '2012-07-01' --*/ --/* ---------------------------------------------------------------------------------- -- après sortie du local : installation du moteur s01 sur le camion vin01 ---------------------------------------------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2012-07-02', '9999-12-31' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin01') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; SELECT '' as 'instal légale s01 sur vin01', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate --*/ --/* ----------------------------------------------------------------------------- -- tentative de bilocation : le moteur ne peut pas être en même temps sur -- les camions vin01 et vin02. ----------------------------------------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2016-12-09', '9999-12-31' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin02') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; SELECT '' as 'tentative illégale (bilocation) s01 sur vin02', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate ; --/* --/* --------------------------------------------------------- -- désinstallation du moteur s01 du camion vin01 --------------------------------------------------------- UPDATE COMPOSANT_AFFECTATION SET ComposantDesInstallationDate = '2016-12-09' WHERE LocalisationId = (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin01') AND ComposantInstallationDate = '2012-07-02' ; --*/ --/* ---------------------------------------------------------------------------- -- il n'y a plus de bilocation, vin02 prend le relais de vin01 ----------------------------------------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2016-12-09', '9999-12-31' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin02') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; SELECT '' as 'instal légale s01 sur vin02', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate ; --*/ --/* --------------------------------------------------------- -- désinstallation du moteur s01 du camion vin02 --------------------------------------------------------- UPDATE COMPOSANT_AFFECTATION SET ComposantDesInstallationDate = '2017-04-02' WHERE LocalisationId = (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin02') AND ComposantInstallationDate = '2016-12-09' ; --*/ --/* ---------------------------------------------------------------------------- -- vin03 prend le relais de vin02 ----------------------------------------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2017-04-02', '9999-12-31' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin03') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; SELECT '' as 'instal légale s01 sur vin03', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate --*/ --/* --------------------------------------------------------- -- désinstallation du moteur s01 du camion vin03 --------------------------------------------------------- UPDATE COMPOSANT_AFFECTATION SET ComposantDesInstallationDate = '2017-12-07' WHERE LocalisationId = (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin03') AND ComposantInstallationDate = '2017-04-02' ; --*/ --/* ---------------------------------------------- -- changement de local (moteur vendu) ----------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2017-12-07', '9999-12-31' , (SELECT LocalisationId FROM LOCAL WHERE LocalCode = 'loc02') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; SELECT '' as 'moteur s01 dans loc02 (vendu)', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate --*/ ---------------------------------------------------------------------------- -- revoilà le moteur qui a été racheté, on le colle dans le garage... ----------------------------------------------------------------------------- UPDATE COMPOSANT_AFFECTATION SET ComposantDesInstallationDate = '2018-01-02' WHERE LocalisationId = (SELECT LocalisationId FROM LOCAL WHERE LocalCode = 'loc02') AND ComposantInstallationDate = '2017-12-07' ; INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2018-01-02', '9999-12-31' , (SELECT LocalisationId FROM LOCAL WHERE LocalCode = 'loc01') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; SELECT '' as 'moteur s01 dans loc01 (racheté)', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate --*/ --/* -------------------------------------------------------------------------- -- sortir le moteur s01 du local -------------------------------------------------------------------------- UPDATE COMPOSANT_AFFECTATION SET ComposantDesInstallationDate = '2018-01-03' WHERE LocalisationId = (SELECT LocalisationId FROM LOCAL WHERE LocalCode = 'loc01') AND ComposantInstallationDate = '2018-01-02' --*/ --/* ---------------------------------------------------------------------------- -- revoilà vin01 pour prendre le relais ----------------------------------------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2018-01-03', '9999-12-31' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin01') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; SELECT '' as 'moteur s01 à nouveau sur camion vin01', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate --*/ -- =========================================================================== --------------------------------------------------------------- -- tests divers ---------------------------------------------------------------- --/* ------------------------------------------------------------------------------- -- recouvrement de période (dans le passé) : le moteur s02 -- ne peut pas être affecté à un camion qui en possède déjà un au moment -- de la tentative de montage. ------------------------------------------------------------------------------ INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2012-07-01', '2013-01-02' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin01') FROM MOTEUR WHERE MoteurNumeroSerie = 's02' ; --*/ SELECT '' as 'après tentative de bilocation', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate --/* ------------------------------------------------------------------------------------------------------- -- Insert légal : un local n'est pas un camion et peut accueillir plusieurs moteurs en même temps ------------------------------------------------------------------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2012-05-01', '9999-12-31' , (SELECT LocalisationId FROM LOCAL WHERE LocalCode = 'loc01') FROM MOTEUR WHERE MoteurNumeroSerie = 's02' ; --*/ SELECT '' as 'Plus d''un camion dans un local donné : ok', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate --/* -------------------------------------------------------- -- Tentatives d'infraction (recouvrement des périodes) -------------------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2018-01-01', '2018-01-04' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin03') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; --*/ SELECT '' as 'tentative bilocation', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate --*/ --/* ------------------------------------------------------------------ -- Tentatives d'infraction (plus d'un moteur pour un camion) ------------------------------------------------------------------ INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2015-07-18', '2015-07-20' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin01') FROM MOTEUR WHERE MoteurNumeroSerie = 's03' ; SELECT '' as '> 1 moteur par camion : illégal', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate ; --*/ --/* -------------------------------------------------------------------------------------- -- installation d'un moteur connu sur un camion inconnu --------------------------------------------------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2017-07-18', '2057-07-20' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'azerty') FROM MOTEUR WHERE MoteurNumeroSerie = 's01' ; SELECT '' as 'camion inconnu', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate ; --/* --/* -------------------------------------------------------------------------------------- -- installation d'un moteur inconnu sur un camion connu --------------------------------------------------------------------------------------- INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2015-07-18', '2015-07-20' , (SELECT CamionId FROM CAMION WHERE CamionVIN = 'vin01') FROM MOTEUR WHERE MoteurNumeroSerie = 'xyzt' ; SELECT '' as 'moteur inconnu', * FROM COMPOSANT_AFFECTATION order by ComposantInstallationDate ; --/* --------------------------------------------------------------------- -- Historique de l'affectation des moteurs : --------------------------------------------------------------------- SELECT MoteurNumeroSerie, CamionVIN as 'affectation à camion' , DateAchat = CASE CAST(ComposantDateAchat as VARCHAR) WHEN '9999-12-31' THEN 'date inconnue' ELSE CAST(ComposantDateAchat AS VARCHAR) END , Fabriquant, Modele , MaxHorsePower, MoteurMaxRPM, MoteurMaxTorque , ComposantInstallationDate, ComposantDesInstallationDate FROM CAMION AS x JOIN COMPOSANT_AFFECTATION AS y ON x.CamionId = y.LocalisationId JOIN COMPOSANT AS z ON y.ComposantId = z.ComposantId JOIN COMPOSANT_TYPE AS t ON z.ComposantTypeId = t.ComposantTypeId JOIN MOTEUR AS u ON z.ComposantId = u.ComposantId -------WHERE CamionVIN = 'vin01' AND LOWER(ComposantTypeLibelle) = 'moteur' WHERE LOWER(ComposantTypeLibelle) = 'moteur' ORDER BY ComposantInstallationDate ; --------------------------------------------------------------------- -- Historique des moteurs : sur quels camions ou dans quels locaux --------------------------------------------------------------------- SELECT * FROM (SELECT 'camion' as 'Type localisation' , MoteurNumeroSerie, CamionVIN AS 'camion (ou local) ayant tel moteur', CamionNumber , CamionDateAchat = CASE CAST(CamionDateAchat as VARCHAR) WHEN '9999-12-31' THEN 'date inconnue' ELSE CAST(ComposantDateAchat AS VARCHAR) END , ComposantInstallationDate, ComposantDesInstallationDate FROM CAMION AS x JOIN COMPOSANT_AFFECTATION AS y ON x.CamionId = y.LocalisationId JOIN COMPOSANT AS z ON y.ComposantId = z.ComposantId JOIN COMPOSANT_TYPE AS t ON z.ComposantTypeId = t.ComposantTypeId JOIN MOTEUR AS u ON z.ComposantId = u.ComposantId UNION SELECT 'local' as 'Type localisation' , MoteurNumeroSerie, LocalCode,'sans objet' , 'sans objet' , ComposantInstallationDate, ComposantDesInstallationDate FROM LOCAL AS x JOIN COMPOSANT_AFFECTATION AS y ON x.LocalisationId = y.LocalisationId JOIN COMPOSANT AS z ON y.ComposantId = z.ComposantId JOIN COMPOSANT_TYPE AS t ON z.ComposantTypeId = t.ComposantTypeId JOIN MOTEUR AS u ON z.ComposantId = u.ComposantId ) as xx ----------WHERE MoteurNumeroSerie = 's02' ORDER BY ComposantInstallationDate ; ROLLBACK ;
(a) Faites simple, mais pas plus simple ! (A. Einstein)
(b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)
__________________________________
Bases de données relationnelles et normalisation : de la première à la sixième forme normale
Modéliser les données avec MySQL Workbench
Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
Wowwwww , vous êtes vraiment tenace dans le développement de cette base de données. Je vous admire. Je n'ai presque plus de crédit dans le développement de cette base de données hahaha Mais pour l'instant ce qui importe c'est de la rendre opérationnelle avant Noël Et en plus elle me servira toujours pour les prochaines bases de données que je développerai….. Je vous inviterai à y participer
Seulement quelques commentaires…..
Pour les différentiels :
Lorsqu'ils sont sur un tandem ou un tridem, c'est à dire lorsqu'un camion à 2 ou 3 essieux moteur (les essieux moteurs sont les essieux qui ont un différentiel).
Il est impossible d'intervertir l'ordre des essieux qui ont des différentiels, c'est à dire qu'un essieu/différentiel 2ND ne peut pas se retrouver physiquement à la place du 3RD et que le 3RD ne peut pas se retrouver physiquement à la place du 2ND car se sont deux essieux/différentiels complètement différents comme la porte gauche et la porte droite, nous ne pouvons pas les interchanger.
Il y a une seule exception dans cette règle, c'est si le propriétaire décide d'enlever un essieux arrière. Donc le camion qui avait un FRGAWR, un 2NDGAWR et un 3RDGAWR, deviendra un camion avec un FRGAWR et un REARGAWR. Dans cette situation, le propriétaire utilisera le même REARREARAXLE sur ce camion et il deviendra un REARAXLE. Par contre il est impossible d'utiliser le FORWARDREARAXLE pour en faire un REARAXLE car ils sont physiquement et mécaniquement différents. En fait, la table "DIFFERENTIEL" aurait dû être nommée "AXLE" et dans cette table "AXLE" nous avons des essieux "FRONTAXLE, des FORWARDREARAXLE, et des REARREARAXLE. Il y a des essieux qui ont des différentiels et des essieux qui n'en ont pas. Disons pour l'essieu avant qui se nomme FRONTAXLE "Essieu Directeur car son but est de diriger le véhicule", règle générale, un camion n'a pas de différentiel sur son FRONTAXLE mais il a quand même un FRGAWR. Mais il est tout à fait possible de lui mettre un essieu directeur avec un différentiel comme pour les petits camions "Pickup" 4X4, on lui met un essieu directeur avec un différentiel. Mais un FRONTAXLE dans 99,9% des cas ne se retrouvera jamais à l'arrière d'un véhicule, bien qu'il y ait quelques fois des exceptions mais vous n'en verrez probablement jamais personnellement.
Commencez-vous à aimer les différentiels ???
Regardez ce camion, il a un essieu directeur à l'avant et un essieu directeur à l'arrière. Par contre il est impossible de voir d'après la photo si l'essieu directeur arrière a un différentiel ou pas.
Pièce jointe 416913
C'est ça un de nos problèmes avec les contraintes, un camion peut avoir plus que 2 différentiels car il peut avoir autant de différentiels qu'il a d'essieux mais pas nécessairement.
Exemple : Un camion peur avoir 2 essieux et un différentiel, ce même camion peux avoir 2 essieux et 2 différentiels. Ce même camion peut avoir 3 essieux et 1 différentiel. Ce même camion peut avoir 3 essieux et 2 différentiels. Ce même camion peux avoir 3 essieux et 3 différentiels. Et ainsi de suite…
Magnifique camion Chinois 4X4…………….avec technologie européenne.Au fait, j'ai oublié de mentionner qu'un même différentiel peut avoir 2 Ratios différents.
Et j'ai aussi omis de mentionner qu'un camion peut avoir 2 transmissions et certains camion 3 transmissions.
Pièce jointe 416918
En version 6X6
Pièce jointe 416921
En version 8X8
Pièce jointe 416925
Envoyé par fsmrel
------------------------------------------------ ------- Script Achat Nouveau Camion -------- ------------------------------------------------ USE [DZINDZIO_TRUCKS_MANAGEMENT] GO INSERT INTO LOCALISATION (LocalisationNote) VALUES ('') ; INSERT INTO CAMION (CamionId, CamionVIN, CamionDateAchat, CamionManufacturer, CamionModel) SELECT MAX(LocalisationId), '1FUJGLDR2ALAR5712', '2017-01-01', 'Kenworth', 'W900L' FROM LOCALISATION ; INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele) SELECT ComposantTypeId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'), 'Detroit', 'DD15 14.9L' FROM COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'moteur' ; INSERT INTO MOTEUR (ComposantId, MoteurNumeroSerie, MaxHorsePower) SELECT MAX(ComposantId), '763798hfjguri837', 470 FROM COMPOSANT ; INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'), '9999-12-31' , (SELECT CamionId FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712') FROM MOTEUR WHERE MoteurNumeroSerie = '763798hfjguri837' ; INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele) SELECT ComposantTypeId, '2017-01-01', 'Meritor', 'RTLO-16918A' FROM COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'transmission' ; INSERT INTO TRANSMISSION (ComposantId, TransmissionNumeroSerie, TransmissionVitesses) SELECT MAX(ComposantId), 'MERITT938475UT', 18 FROM COMPOSANT ; INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, '2017-01-01', '9999-12-31' , (SELECT CamionId FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712') FROM TRANSMISSION WHERE TransmissionNumeroSerie = 'MERITT938475UT' ; ----- Pour le 1er différentiel ----- INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele) SELECT ComposantTypeId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'), 'EATON', 'FR375LC44000' FROM COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'différentiel' ; INSERT INTO DIFFERENTIEL (ComposantId, DifferentielNumeroSerie, DifferentielRatio, DifferentielLock) SELECT MAX(ComposantId), 'EA983246834TON832HH8', 3.75, 'Yes' FROM COMPOSANT ; INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'), '9999-12-31' , (SELECT CamionId FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712') FROM DIFFERENTIEL WHERE DifferentielNumeroSerie = 'EA983246834TON832HH8' ; ----- Pour le 2e différentiel ----- INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele) SELECT ComposantTypeId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'), 'EATON', 'RR375LC44000' FROM COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'différentiel' ; INSERT INTO DIFFERENTIEL (ComposantId, DifferentielNumeroSerie, DifferentielRatio, DifferentielLock) SELECT MAX(ComposantId), 'EA983246834TON832HH9', 3.75, 'No' FROM COMPOSANT ; INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId) SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712'), '9999-12-31' , (SELECT CamionId FROM CAMION WHERE CamionVIN = '1FUJGLDR2ALAR5712') FROM DIFFERENTIEL WHERE DifferentielNumeroSerie = 'EA983246834TON832HH9' ;
Cannot execute SQL statement: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Update or insert of view or function 'dbo.CAMION_LOCALISATION_ECRAN_V' failed because it contains a derived or constant field.
Pauvre Ordigil...
SQL Server est sévère :
Mais la vue CAMION_LOCALISATION_ECRAN_V n’est pas faite pour la mise à jour, seulement pour la consultation, comme je l’ai précisé dans le post 148.
Pour mettre à jour, il y est bien dit d’utiliser la vue CAMION_LOCALISATION_V.
(a) Faites simple, mais pas plus simple ! (A. Einstein)
(b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)
__________________________________
Bases de données relationnelles et normalisation : de la première à la sixième forme normale
Modéliser les données avec MySQL Workbench
Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
Je viens d’ajouter les colonnes 4THGAWR et REARGAWR de la table CAMION.
CREATE TABLE :
CREATE TABLE CAMION ( CamionId INT NOT NULL , CamionVIN VARCHAR(24) NOT NULL , CamionDateMfg DATE NOT NULL DEFAULT '9999-12-31' , CamionDateAchat DATE NOT NULL DEFAULT '9999-12-31' , CamionManufacturer VARCHAR(15) NOT NULL , CamionModel VARCHAR(15) NOT NULL , CamionWheelBase INT NOT NULL DEFAULT 0 , CamionColor VARCHAR(15) NOT NULL DEFAULT 'White' , CamionNumber VARCHAR(6) NOT NULL DEFAULT '' , CamionImmat VARCHAR(9) NOT NULL DEFAULT '' , USDOT VARCHAR(10) NOT NULL DEFAULT '0' , ICCMC VARCHAR(10) NOT NULL DEFAULT '0' , GVWR INT NOT NULL DEFAULT 0 , FRGAWR INT NOT NULL DEFAULT 0 , [2NDGAWR] INT NOT NULL DEFAULT 0 , [3RDGAWR] INT NOT NULL DEFAULT 0 , [4THGAWR] INT NOT NULL DEFAULT 0 , REARGAWR INT NOT NULL DEFAULT 0 , CamionDateVente DATE NOT NULL DEFAULT '9999-12-31' , CONSTRAINT CAMION_PK PRIMARY KEY (CamionId) , CONSTRAINT CAMION_VIN_AK UNIQUE (CamionVIN) , CONSTRAINT CAMION_LOCALISATION_FK FOREIGN KEY (CamionId) REFERENCES LOCALISATION (LocalisationId) , CONSTRAINT CAMION_DATE_MFT_CHK CHECK (CamionDateMfg > '') );
Vue CAMION_LOCALISATION_V (à utiliser pour les mises à jour) :
CREATE VIEW CAMION_LOCALISATION_V ( VIN, DateMfg, Manufacturer, Model, WheelBase, Color , USDOT, ICCMC, GVWR,FRGAWR, [2NDGAWR], [3RDGAWR], [4THGAWR], REARGAWR, DateAchat , Number, Immat, DateSold, Note ) AS SELECT CamionVIN, CamionDateMfg, CamionManufacturer, CamionModel, CamionWheelBase, CamionColor , USDOT, ICCMC, GVWR, FRGAWR, [2NDGAWR], [3RDGAWR], [4THGAWR], REARGAWR, CamionDateAchat , CamionNumber, CamionImmat, CamionDateVente, LocalisationNote FROM CAMION AS x JOIN LOCALISATION AS y ON x.CamionId = y.LocalisationId ; GO
Vue CAMION_LOCALISATION_ECRAN_V (en lecture seulement !)
CREATE VIEW CAMION_LOCALISATION_ECRAN_V (VIN , Number , Immat , Manufacturer , Model , Color , WheelBase , USDOT, ICCMC , GVWR, FRGAWR,[2NDGAWR], [3RDGAWR], [4THGAWR], REARGAWR , DateMfg , DateAchat , DateSold , Note ) AS SELECT VIN , Number , Immat , Manufacturer , Model , Color , CASE(CAST(WheelBase AS VARCHAR)) WHEN '0' THEN '' ELSE CAST(WheelBase AS VARCHAR) END AS WheelBase , USDOT , ICCMC , GVWR, FRGAWR,[2NDGAWR], [3RDGAWR], [4THGAWR], REARGAWR , CASE(CAST(DateMfg AS VARCHAR)) WHEN '9999-12-31' THEN 'valoriser !' ELSE CAST(DateMfg AS VARCHAR) END AS DateMfg , CASE(CAST(DateAchat AS VARCHAR)) WHEN '9999-12-31' THEN 'valoriser !' ELSE CAST(DateAchat AS VARCHAR) END AS DateAchat , CASE(CAST(DateSold AS VARCHAR)) WHEN '9999-12-31' THEN '' ELSE CAST(DateSold AS VARCHAR) END AS DateSold , Note FROM CAMION_LOCALISATION_V ;
(a) Faites simple, mais pas plus simple ! (A. Einstein)
(b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)
__________________________________
Bases de données relationnelles et normalisation : de la première à la sixième forme normale
Modéliser les données avec MySQL Workbench
Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
Et vous savez où on demande d'entrer un Note dans LOCALISATION, il ne faut pas forcer l'utilisateur à entrer une Note, car il n'y aura pas toujours une Note à entrer, on pourrait même une valeur par default "NOTA BENE". Il faut simplifier au maximum la création d'un nouveau camion. J'ai corrigé les petites erreurs qu'il y avait dans vos scripts d'ajout et j'ai tout mis dans un seul script.
Les valeurs par défaut à ''0'' ça c'est parfait. Les GAWR, c'est parfait car nous n'aurons probablement jamais autre chose que ça ici. Mais je vais quand même faire des expérimentations dans ''GILLES_VILAIN'' avec les différentiels. Pour la création d'un nouveau camion, il faut vraiment minimiser les données à entrer pour que se soit le plus simple et le plus rapide pour l'utilisateur. Ensuite il ira mettre è jour les éléments manquants. Même le modèle du camion et le numéro d'immatriculation, on pourrait mettre ''0'' par défaut. L'important pour la création d'un nouveau Camion c'est le VIN du camion et son Numéro d'unité. Donc on force l'utilisateur à entrer le CamionVIN, le CamionManufacturier et le CamionNumber. Et les autres toutes des valeurs par défaut. Pour la création d'un nouveau Camion, dans mon formulaire, sur le même formulaire, l'utilisateur créera le nouveau Camion avec son Moteur, sa transmission et ses différentiels, il faudra que tous se fasse dans un Click ''GO'' Le problème c'est que nous n'aurons pas toujours les numéros de série de la transmission et des différentiels lors de la création des nouveaux Camions, il faudra être capable d'entrer des Dummies Number et corriger plus tard, mais encore là. il se peut que nous n'ayons jamais les numéros de série des différentiels car ils ont tendances à disparaître. L'important c'est de créer le camion et ensuite entrer les autres éléments au fur et à mesure que nous les aurons. La j'ai un Moteur dont le numéro de série à complètement disparu à cause de la corrosion.
[QUOTE=fsmrel;10513318]Je viens d’ajouter les colonnes 4THGAWR et REARGAWR de la table CAMION.
CREATE TABLE :
CREATE TABLE CAMION ( CamionId INT NOT NULL , CamionVIN VARCHAR(24) NOT NULL , CamionDateMfg DATE NOT NULL DEFAULT '9999-12-31' , CamionDateAchat DATE NOT NULL DEFAULT '9999-12-31' , CamionManufacturer VARCHAR(15) NOT NULL , CamionModel VARCHAR(15) NOT NULL , CamionWheelBase INT NOT NULL DEFAULT 0 , CamionColor VARCHAR(15) NOT NULL DEFAULT 'White' , CamionNumber VARCHAR(6) NOT NULL DEFAULT '' , CamionImmat VARCHAR(9) NOT NULL DEFAULT '' , USDOT VARCHAR(10) NOT NULL DEFAULT '0' , ICCMC VARCHAR(10) NOT NULL DEFAULT '0' , GVWR INT NOT NULL DEFAULT 0 , FRGAWR INT NOT NULL DEFAULT 0 , [2NDGAWR] INT NOT NULL DEFAULT 0 , [3RDGAWR] INT NOT NULL DEFAULT 0 , [4THGAWR] INT NOT NULL DEFAULT 0 , REARGAWR INT NOT NULL DEFAULT 0 , CamionDateVente DATE NOT NULL DEFAULT '9999-12-31' , CONSTRAINT CAMION_PK PRIMARY KEY (CamionId) , CONSTRAINT CAMION_VIN_AK UNIQUE (CamionVIN) , CONSTRAINT CAMION_LOCALISATION_FK FOREIGN KEY (CamionId) REFERENCES LOCALISATION (LocalisationId) , CONSTRAINT CAMION_DATE_MFT_CHK CHECK (CamionDateMfg > '') );
Ohhhhhhh, la mise à jour des camions fonctionne maintenant à partir du site WEB
Par contre, je vais devoir le remettre à jour pour rajouter les colonnes que vous avez ajouté dans la table CAMION
Queele est la base ? La requête ?
L’utilisateur n’est pas obligé de fournir une note ! Il y a une valeur par défaut : ''
Exemple :
use temp ; begin transaction ; INSERT INTO CAMION_LOCALISATION_V (VIN, Immat, DateAchat, Manufacturer, Model, Number) SELECT 'zinzin', 'zinimmat', '2012-07-01', 'Leclerc', 'Modèle Z', 'zzz314' -------------------------------------- -- pour visualiser -------------------------------------- select * from CAMION_LOCALISATION_V select * from CAMION ; select * from LOCAL_LOCALISATION_V select * from LOCALISATION ; rollback ;
(a) Faites simple, mais pas plus simple ! (A. Einstein)
(b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)
__________________________________
Bases de données relationnelles et normalisation : de la première à la sixième forme normale
Modéliser les données avec MySQL Workbench
Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
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