> Tous les forums > Forum Autres langages
 Sql MCD pour un projet de location
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Labougie
  Posté le 08/01/2015 @ 23:38 
Aller en bas de la page 
Groupe Sécurité

Bonjour,

J'aimerai avoir un oeil différent sur un projet que j'ai commencé, le but est de faire un MCD le + précis possible afin que je puisse avancer sur une programmation en java (ultérieurement).

Le MCD

Le script de création de la bd

CREATE TABLE client (
client_id INT AUTO_INCREMENT NOT NULL ,
client_sexe CHAR(1),
client_nom VARCHAR(40) NOT NULL,
client_prenom VARCHAR(40),
client_adresse VARCHAR(80),
client_cde_postal VARCHAR(8),
client_ville VARCHAR(40),
client_permis_conduire VARCHAR(20),
client_date_permis_conduire DATE,
client_date_naissance date,
PRIMARY KEY (client_id)
);

CREATE TABLE vehicule (
vehicule_id int NOT NULL,
vehicule_type varchar(10),
vehicule_marque char(32),
vehicule_immatriculation varchar(10) NOT NULL UNIQUE,
vehicule_couleur char(16) ,
vehicule_date_derniere_revision DATE,
type_id int,
index (type_id),
PRIMARY KEY (vehicule_id)
);

CREATE TABLE type_vehicule (
type_numero_saisie int(5) not null,
type_id varchar(15) NOT NULL,
type_categorie varchar(15) not null,
type_marque VARCHAR(30),
type_modele VARCHAR(20),
type_energie VARCHAR(20),
type_prix_km FLOAT,
type_permis_requis VARCHAR(2),
type_anciennete_permis_requise int,
type_franchise FLOAT,
type_rachat_franchise FLOAT,
PRIMARY KEY (type_numero_saisie)
);

CREATE TABLE tarif (
tarif_id int NOT NULL,
tarif_typevehicule INT,
tarif_dureeenjour FLOAT,
tarif_prix FLOAT,
tarif_forfaitkm INT,
PRIMARY KEY (tarif_id)
);

CREATE TABLE concession (
concession_id int NOT NULL,
concession_nom varchar(40),
concession_adresse varchar(80),
concession_cde_postal VARCHAR(8),
concession_ville VARCHAR(40),
concession_telephone varchar(12),
PRIMARY KEY (concession_id)
);

CREATE TABLE tarif8 (
tarif8_id int AUTO_INCREMENT NOT NULL,
tarif8_pdtid int,
tarif8_prix float,
tarif8_dureejoursemaine int,
tarif8_dureejourwe int,
tarif8_date date NOT NULL,
tarif8_kmsupp float,
PRIMARY KEY (tarif8_id)
);

CREATE TABLE tarif11 (
tarif11_id int AUTO_INCREMENT NOT NULL,
tarif11_prdtid int,
tarif11_prix float,
tarif_11_dureejourssemaine int,
tarif_11dureejourwe int,
tarif11_date date NOT NULL,
tarif11_kmsupp float,
PRIMARY KEY (tarif11_id)
);

CREATE TABLE loue (
location_id int AUTO_INCREMENT,
location_client BIGINT,
client_nom varchar(40),
client_prenom varchar(40),
type_id varchar(15),
vehicule_immatriculation varchar(10),
location_vehicule BIGINT,
location_km_depart BIGINT,
location_km_fin BIGINT,
location_date_debut DATETIME,
location_date_fin DATETIME,
location_montanttotal DECIMAL(16,2),
index (client_nom,client_prenom),
index (vehicule_immatriculation, type_id),
PRIMARY KEY (location_id)
);

CREATE TABLE coute (
tarif8_id int NOT NULL,
tarif11_id int NOT NULL,
type_id varchar(15) not null,
tarif_id int not null,
PRIMARY KEY (tarif8_id, tarif11_id)
);

CREATE TABLE intervention (
intervention_id int,
intervention_duree date,
intervention_objet varchar(30),
vehicule_id int not null,
concession_id int not null,
PRIMARY KEY (intervention_id)
);

Les Contraintes que j'arrive à faire passer

ALTER TABLE loue ADD CONSTRAINT FK_vehicule_immatriculation FOREIGN KEY (vehicule_immatriculation) REFERENCES vehicule (vehicule_immatriculation);
ALTER TABLE loue ADD CONSTRAINT FK_type_id FOREIGN KEY (type_id) REFERENCES vehicule (type_id);

ALTER TABLE coute ADD CONSTRAINT FK_coute_tarif_id FOREIGN KEY (tarif_id) REFERENCES tarif (tarif_id);
ALTER TABLE coute ADD CONSTRAINT FK_coute_tarif8_id FOREIGN KEY (tarif8_id) REFERENCES tarif8 (tarif8_id);
ALTER TABLE coute ADD CONSTRAINT FK_coute_tarif11_id FOREIGN KEY (tarif11_id) REFERENCES tarif11 (tarif11_id);

ALTER TABLE intervention ADD CONSTRAINT FK_intervention_vehicule_id FOREIGN KEY (vehicule_id) REFERENCES vehicule (vehicule_id);
ALTER TABLE intervention ADD CONSTRAINT FK_intervention_concession_id FOREIGN KEY (concession_id) REFERENCES concession (concession_id);

Celles que je ne peux pas valider,

ALTER TABLE loue ADD CONSTRAINT FK_client_nom FOREIGN KEY (client_nom) REFERENCES client (client_nom);
ALTER TABLE loue ADD CONSTRAINT FK_client_prenom FOREIGN KEY (client_prenom) REFERENCES client (client_prenom);
ALTER TABLE vehicule ADD CONSTRAINT FK_type_id FOREIGN KEY (type_id) REFERENCES type_vehicule (type_id);
ALTER TABLE coute ADD CONSTRAINT FK_coute_type_id FOREIGN KEY (type_id) REFERENCES type_vehicule (type_id);

Labougie

Publicité
Labougie
 Posté le 08/01/2015 à 23:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

Les inscriptions dans la bd afin de faire des tests notamment la saisie

--
-- Contenu de la table `client`
----

INSERT INTO `client` (
`client_id`, `client_sexe`, `client_nom`, `client_prenom`, `client_adresse`, `client_cde_postal`,
`client_ville`, `client_permis_conduire`, `client_date_permis_conduire`, `client_date_naissance`
)
VALUES

(1, 'm', 'bono', 'jean', '12 rue du cochon', '10000', 'cochon ville', '0123456789', '1980-10-10', '1960-10-11'),

(2, 'f', 'déprés', 'rose', '10 rue des fleurs', '11000', 'fleurs ville', '234567890', '1986-08-12', '1969-10-03'),

(3, 'm', 'mike', 'posner', '2 rue du coque', '25000', 'rigoleville', '0892658945', '1990-01-10', '1970-10-11'),

(4, 'f', 'auchon', 'paule', '56 ave de louyat', '35000', 'super ville', '234569874', '1995-12-10', '1974-11-30');

----- Contenu de la table Concession -----

INSERT INTO `concession` (
`concession_id`, `concession_nom`, `concession_adresse`, `concession_telephone`,
`Concession_cde_postal`, `concession_ville`)

VALUES

(0, 'renault', '26 rue des voitures', '1234567890', 12345, 'trucaville'),

(1, 'fiat', '45 rue des camions', '0145876789', 12345, 'trucaville'),
(2, 'peugeot','36 rue des lions','0256458965', 90000, 'belfort'),
(3, 'citroen', '45 rue des chevrons','5698652301', 75000, 'paris');

--
-- Contenu de la table `tarif8`
--



INSERT INTO `tarif8`
(`tarif8_id`, `tarif8_pdtid`, `tarif8_prix`, `tarif8_dureejoursemaine`, `tarif8_dureejourwe`, `tarif8_date`, `tarif8_kmsupp`)

VALUES

(1, 50, 25, 1, NULL, '2014-12-20', 0.12),

(2, 100, 30, 1, NULL, '2014-12-20', 0.12),

(3, 100, 50, 2, NULL, '2014-12-20', 0.12),

(4, 200, 55, 2, NULL, '2014-12-20', 0.12),

(5, 400, 65, NULL, 1, '2014-12-20', 0.12),

(6, 500, 76, NULL, 1, '2014-12-20', 0.12);

---- Contenu de la table 'tarif11'----

INSERT INTO `tarif11`
(`tarif11_id`, `tarif11_prdtid`, `tarif11_prix`, `tarif_11_dureejourssemaine`, `tarif_11dureejourwe`, `tarif11_date`, `tarif11_kmsupp`)
VALUES
('1', '50', '32.50', '1', NULL, '2014/12/20', '0.15'),
('2', '100', '48', '1', NULL, '2014/12/20', '0.15'),
('3', '100', '56', '2', NULL, '2014/12/20', '0.15'),
('4', '100', '35', NULL, '1', '2014/12/20', '0.15');

----Contenu de la table `type_vehicule`
--



INSERT INTO `type_vehicule`
(`type_numero_saisie`,`type_id`, `type_categorie`, `type_marque`, `type_modele`, `type_energie`, `type_prix_km`,
`type_permis_requis`, `type_anciennete_permis_requise`, `type_franchise`, `type_rachat_franchise`)

VALUES

('1','11', 'vul', 'fiat', 'ducato', 'go', 0.15, 'b', 2, 850, 200),

('2','20', 'vul', 'ducato20', 'ducato', 'go', 0.2, 'b', 5, 1100, 200),

('3','20H', 'vul', 'renault', 'truck', 'go', 0.21, 'b', 5, 1100, 200),

('4','8', 'vul', 'fiat', 'ducato', 'go', 0.12, 'b', 2, 850, 200),

('5','benne', 'benne', 'nissan', 'capstar', 'go', 0.2, 'b', 2, 1100, 200),
('6','duster', 'tourisme', 'dacia', 'duster', 'go', 0.2, 'b', 2, 1100, 200),

('7','lodgy', 'tourisme', 'dacia', 'lodgy', 'ess', 0.15, 'b', 2, 1100, 200),

('8','mini bus', 'mini bus', 'fiat', 'scudo', 'go', 0.2, 'b', 5, 1000, 200),

('9','sandero', 'tourisme', 'dacia', 'sandero', 'ess', 0.12, 'b', 2, 1100, 200);

--
-- Contenu de la table `vehicule ----



INSERT INTO `vehicule`
(`vehicule_id`, `vehicule_type`, `vehicule_marque`, `vehicule_immatriculation`, `vehicule_couleur`, `vehicule_date_derniere_revision`, `type_id`)
VALUES

(1, 'ducato', 'fiat', 'aa-123-aa', 'blanc', NULL, '8'),

(2, 'ducato', 'fiat', 'bb-234-bb', 'blanc', NULL, '8'),

(3, 'ducato', 'fiat', 'cc-256-cc', 'blanc', NULL, '11'),

(4, 'scudo', 'fiat', 'dd-456-dd', 'brun', NULL, 'mini bus'),

(5, 'master', 'renault', 'ee-456-ee', 'blanc', NULL, '20H'),

(6, 'benne', 'nissan', 'dd-123-dd', 'vert', NULL, 'benne'),

(7, 'ducato', 'fiat', 'cc-789-cc', 'bleu', NULL, '20'),

(8, 'ducato', 'fiat', 'dd-563-dd', 'rouge', NULL, '20'),

(9, 'master', 'renault', 'aa-563-aa', 'violet', NULL, '20H'),

(10, 'ducato', 'fiat', 'bb-896-bb', 'bleu', NULL, '8'),

(11, 'ducato', 'fiat', 'cc-569-cc', 'blanc', NULL, '11');

Labougie

Labougie
 Posté le 08/01/2015 à 23:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

Voici mes questions

Peut on remplir directement la table loue afin que cette dernière remplisse les champs de la table client de façon automatisée.
Il m'est impossible de remplir le champ Type_id dans loue, (il est verrouillé sur 0-8-11-20)

alors que d'autres paramètres existent et sont pris en compte pour l'attribut type_id dans la table type_vehicule

merci de me conseiller, je suis preneur de toutes les idées afin d'avancer.

labougie

Labougie
 Posté le 09/01/2015 à 10:44 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

Bonjour JP,

Justement il ne s'implante pas ce code donné par analyse Si.

Du coup je l'ai scripté à la mano, et j'ai tenté les insertions des contraintes, du certaines sont ok d'autres non.

Je vais ressortir une nouvelle version de ce code analyse Si.

Labougie

Edit

En plus de cela, analysesi vient de me planter pas glop

donc tu m'indiques qu'il faut partir de ceci

Analyse Si ma fourni un script suite à ce MLD mis à jour pour l'occasion, sauf que ce script n'est pas accepté par MY_Sql, c'est quand même fort de café .

En voici un bout (la1ere table)

CREATE TABLE client (
client_id AUTO_INCREMENT NOT NULL,
client_nom VARCHAR(40),
client_prenom VARCHAR(40),
client_adresse VARCHAR(80),
client_cde_postal VARCHAR(8),
client_ville VARCHAR(40),
client_permis_conduire VARCHAR(10),
client_date_permis_conduire DATETIME,
client_date_naissance date);



Modifié par Labougie le 09/01/2015 11:19
Labougie
 Posté le 10/01/2015 à 11:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

Bonjour JP,

Rendre le script compatible avec mon MY_Sql, ok, mais pas franchement simple mais j'accepte le deal.

Donc, que j'utilise AnalyseSi ou Sql Workbench,

  1. j'obtiens donc un "pseudo" script à retravailler ==> ok pour cela
  2. Ce script génère des clés primaires en fonction de ma composition ==> ok pour cela
  3. Ce script génère des clés étrangères toujours en fonction de ma composition mais aussi en fonction des cardinalités ==> je suis obligé d'être d'accord (c'est produit automatiquement)
  4. Quand je veux donc bêtement intégrer ce script généré de façon automatisé, PHP My_Admin me dit (les clés étrangères j'en veux pas) ===> pourquoi ne les veux t'il pas ces fameuses clés étrangères ????

Si je comprends bien, les clés étrangères se sont pas à inclure dans mon script de création de base de données.

ALORS, à quoi servent elles? car franchement elles me sortent par les yeux.


Je viens de tester SQL_Workbench, c'est plus souple et agréable qu'Analyse_Si

labougie



Modifié par Labougie le 10/01/2015 11:37
Labougie
 Posté le 10/01/2015 à 12:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

Je me doute bien que ces clés étrangères sont importantes car elles lient entres elles les tables.

Ce que je ne saisie pas, c'est pourquoi mes commandes sql ne sont pas prises en compte dans php my_admin.

Je vois bien dans ton mld-r cette création des 2 clés étrangères, et j'ai bien suivi ton post plus haut (indiquant que ce dernier est le + important) pour la création de la bd.

Mais, les

alter table xx ne veulent rien savoir, cela là mon problème.

Je vais relire tes lectures ce WE (faut aller bosser cette aprem), et je vais tâcher de mieux comprendre le pourquoi du comment.

Labougie

Le script fourni par sql_workbench

Chez moi, en version brute les tables loue, client & coute ne veulent rien savoir.

Il est probable que j'utilise mal php my_admin, mais là j'ai quand même un certain recul maintenant sur son fonctionnement (je parle que du sql pas des liaisons serveurs).

Edit sur le lien



Modifié par Labougie le 10/01/2015 12:28
Labougie
 Posté le 12/01/2015 à 23:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

JPhi,

Je comprends ta réponse, mais le projet demandé et en quelque sorte une mise en condition.

Mes confrères ont aussi des projets avec en moyenne 5 à 8 tables, du coup, je suis dans les temps. (gestion camping, d'une vidéotech, loc de vélo)

Tu m'indiques que les clés étrangères sont à apprendre, je suis ok pour cela. En revanche mon prof m'indique de ne pas en tenir compte, biztrange quand même

Il est donc inutile de les déclarer comme telles, il faut rester le plus simple possible et surtout comprendre ce que l'on fait.
Certains logiciels les déclarent pour faire des contrôles sur les tables et données. Laissez les donc de côté;

Suis dans l'expectative du coup, (il parle ici de l'inscription via alter table xx foreign key...)

Je ne sais plus à quel saint me vouer .

D'autant plus qu'ensuite faut enchaîner avec le PHP (mais suis pas encore sous cette étape. PHP My_Admin permet de faire des saisies et des requêtes pour obtenir les resultats escomptés.

Sql workbench rend de très grands services, + simple et + pratique.

Merci d'éclairer labougie afin que j'y vois plus claire .

Labougie

Labougie
 Posté le 13/01/2015 à 18:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

Salut JPhi,

Ce n'est pas simple, regarde.

je reprends l'exemple

voiture (voiture_id,voiture_type,.......)
client (client_id,client_nom,.......)
location (location_id,location_date, #voiture_id, #client_id,.......)

#voiture_id et #client_id sont des clés étrangères qui permettent de réaliser des jointures entre les tables voiture, client et location

donc ces champs voiture_id et client_id spnt crees dans location et vous faire une jointure 
select...where voiture.voiture_id=location.voiture_id and client.client_id=location.client_id 
afin de reconstituer un ligne qui englobe les champs des trois table.

si vous avez encore des problemes, revoyez les documents du cours sql sur les jointures.

Je ne comprends plus rien à rien.

Location englobe la PK, les attributs, et les clés étrangères dans ce qu'il me donne comme exemple. Mais pourtant le script de conception des tables lui ne les inclue pas.

Dois-je en inférer que:

  • En fonction de la cardinalité, ces clés étrangères sont déduites, mais je ne les écris pas dans mon script (conseil du prof), mais si je souhaite faire des jonctions (jointure), je peux quand même les utiliser
  • Pour faire mes jointures, je n'utiliserai jamais ces clé étrangères car je peux partir sur le principe suivant table.attribut (qui fonctionne assez bien).

Si tu as une explication simple et surtout rationnel, je suis preneur, car là, suis dans le merdier .


Pour ce qui est de la puissance des outils d'aide au développement, c'est très pratique, mais je suis attaché à apprendre et perfectionner le code source.

Je pense que le code source, c'est le nerf de la guerre. .


Pour en revenir à la taille de la bd qui n'est pas de mon niveau de connaissance, (nombre des tables), mais sur le comment s'en servir. Peux tu alors me guider, car en fait suis pris par le temps maintenant car mon projet en pour le 25-01, et partiel dans la foulée, oups c'est short pour tout changer, non!

labougie

Labougie
 Posté le 15/01/2015 à 18:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

JPhi,

Je sais que tu es pris par le temps, du coup le mien se réduit de semaines en jours (bientôt game_over).

Peux tu à partir des diagrammes me faire un chti script et ou diagramme + cardinalités afin que je comprenne ce que je n'ai pas encore compris, saisi, assimilé etc...

Si tu travailles aussi sous sql_workbench je peux te passer le script, (souhaitant qu'il soit retro pour obtenir le diagramme, [heu... j'écris sans doute une connerie là sur l'action rétro ]).

Labougie

Publicité
Labougie
 Posté le 15/01/2015 à 23:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

Je me doutais bien que tu étais sur chargé .

Ceux qui ont des idées constructives peuvent se joindre au projet. [Game-Over le 26-01/15].

Alors soyez créatifs d'idées constructives .

Labougie

Labougie
 Posté le 16/01/2015 à 00:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

Nous pourrions déjà commencer par regarder le diagramme afin de savoir si je l'ai construit correctement.

Je n'ai jamais été très bon en dessins ou graffitis.

labougie

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Erreur lors de la génération du projet
acess et vba pour modification d'une base de donnée
Commande batch pour ouvrir plusieurs fichiers windows 8
vb6 sp6 menu nouveau projet
Projet BTS : Balance et étiqueteuse
Projet "c #" défectueux (Un enseignant devrait évaluer).
Aide pour un programme simple en C++
macro excell pour ouverture fichier avec password
Sites Internet d'apprentissage pour C++
Aide POur initiation a SQL ( oracle 10G)
Plus de sujets relatifs à Sql MCD pour un projet de location
 > Tous les forums > Forum Autres langages