IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Conseil pour ameliorer mon scenario d'insertion dans la base de donnees


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut Conseil pour ameliorer mon scenario d'insertion dans la base de donnees
    Bonjour a tous,

    je travail sur petite application web qui a pour but de permettre a des utilisateurs de localiser des batiments via un formulaire. En effet en terme de BD
    j'ai une table batiment, cette table est lie avec une table photosbatiments(qui contient l'ensemble des photos d'un batiment) et une table besoinbatiment(l'ensemble de besoins qu'un batiments peut avoir(ex: 10 tables))

    ainsi quand l'utilisateurs rempli le formulaire et valide en cliquant sur le bouton valider, je commence par inserer dans la table batiment en recuperant l'id de la nouvelle insertion, par la suite j'insers dans la table photosbatiments l'ensemble des photos du batiments(chaque photo correspondant a un enregistrement).Lorsque cette tache est accomplies, je termine en inserrant les tous les besoins dans la table besoinbatiment(encore, chaque besoin fera l'objet d'une nouvelle insertion dans la table).
    Je trouve que ce scenario est assez lourd en terme de traitement surtout s'il y a plusieurs utilisateurs qui valide le formulaire, et de plus il y a assez de vas et vient entre l'application et le serveurs.

    Est ce que vous avez des conseils a me prodiguer en terme de modelisation
    ou de gestion via le code c# afin d'ameliorer le scenario?

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par leks89 Voir le message
    petite application web qui a pour but de permettre a des utilisateurs de localiser des batiments via un formulaire.
    Juque là, OK...

    Citation Envoyé par leks89 Voir le message
    En effet en terme de BD
    j'ai une table batiment, cette table est lie avec une table photosbatiments(qui contient l'ensemble des photos d'un batiment) et une table besoinbatiment(l'ensemble de besoins qu'un batiments peut avoir(ex: 10 tables))
    Là je ne comprends plus, qu'est-ce qui permet la localisation des bâtiments ? Quel est le rapport entre la location et les "besoins" ? Bref, il y a semble-t-il un fossé entre la façon dont tu décris ton application et ce que tu as modélisé

    Citation Envoyé par leks89 Voir le message
    ainsi quand l'utilisateurs rempli le formulaire et valide en cliquant sur le bouton valider, je commence par inserer dans la table batiment en recuperant l'id de la nouvelle insertion
    Donc il n'y a que des insertions ? Jamais de mise à jour ???

    Citation Envoyé par leks89 Voir le message
    par la suite j'insers dans la table photosbatiments l'ensemble des photos du batiments(chaque photo correspondant a un enregistrement).Lorsque cette tache est accomplies, je termine en inserrant les tous les besoins dans la table besoinbatiment(encore, chaque besoin fera l'objet d'une nouvelle insertion dans la table).
    Ok, rien d'anormal ici.

    Citation Envoyé par leks89 Voir le message
    Je trouve que ce scenario est assez lourd en terme de traitement surtout s'il y a plusieurs utilisateurs qui valide le formulaire, et de plus il y a assez de vas et vient entre l'application et le serveurs.
    Ben mis à part quelques bizarreries, c'est le fonctionnement normal. Après il faut voir comment est-ce que tu as conçu tout ça.

    Citation Envoyé par leks89 Voir le message
    Est ce que vous avez des conseils a me prodiguer en terme de modelisation
    ou de gestion via le code c# afin d'ameliorer le scenario?
    Il faut que tu postes le DDL de tes tables (= le code SQL de création) pour qu'on puisse voir comment tu as structuré ta base de données. Une fois qu'on aura fait ça, on regardera ton code.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut
    Merci pour ta reponse DotNetMatt. Desole si je n'ai pas ete assez clair.
    voici le code sql de creation que j'ai genre via sql server

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    USE [BaseTest]
    GO
    /****** Object:  Table [dbo].[Besoin]    Script Date: 11/05/2013 20:02:24 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[Besoin](
    	[idbesoin] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
    	[idstructure] [numeric](18, 0) NULL,
    	[nbrebesoin] [numeric](18, 0) NULL,
    	[idcatbesoin] [numeric](18, 0) NULL,
    	[Etat] [bit] NULL,
     CONSTRAINT [PK_Besoin] PRIMARY KEY CLUSTERED 
    (
    	[idbesoin] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    /****** Object:  Table [dbo].[Catbesoin]    Script Date: 11/05/2013 20:02:24 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[Catbesoin](
    	[idcatbesoin] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
    	[libellecatbesoin] [varchar](50) NULL,
    	[icon] [varchar](max) NULL,
     CONSTRAINT [PK_Catbesoin] PRIMARY KEY CLUSTERED 
    (
    	[idcatbesoin] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
     
    GO
    SET ANSI_PADDING OFF
    GO
    /****** Object:  Table [dbo].[photostructure]    Script Date: 11/05/2013 20:02:24 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[photostructure](
    	[idtofstructure] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
    	[idstructure] [numeric](18, 0) NULL,
    	[photo] [varchar](max) NULL,
     CONSTRAINT [PK_photostructure] PRIMARY KEY CLUSTERED 
    (
    	[idtofstructure] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
     
    GO
    SET ANSI_PADDING OFF
    GO
    /****** Object:  Table [dbo].[STRUCTURE]    Script Date: 11/05/2013 20:02:24 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[STRUCTURE](
    	[IDSTRUCTURE] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
    	[IDUSER] [numeric](18, 0) NULL,
    	[LATITUDE] [varchar](50) NULL,
    	[LONGITUDE] [varchar](50) NULL,
    	[DESCRIPTIONSTRUCTURE] [varchar](max) NULL,
    	[COORDONNEES] [varchar](50) NULL,
    	[imgpushpine] [varchar](max) NULL,
     CONSTRAINT [PK_STRUCTURE] PRIMARY KEY CLUSTERED 
    (
    	[IDSTRUCTURE] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
     
    GO
    SET ANSI_PADDING OFF
    GO
    ALTER TABLE [dbo].[Besoin] ADD  CONSTRAINT [DF_Besoin_Etat]  DEFAULT ((0)) FOR [Etat]
    GO
    ALTER TABLE [dbo].[Besoin]  WITH CHECK ADD  CONSTRAINT [FK_Besoin_Catbesoin] FOREIGN KEY([idcatbesoin])
    REFERENCES [dbo].[Catbesoin] ([idcatbesoin])
    GO
    ALTER TABLE [dbo].[Besoin] CHECK CONSTRAINT [FK_Besoin_Catbesoin]
    GO
    ALTER TABLE [dbo].[Besoin]  WITH CHECK ADD  CONSTRAINT [FK_Besoin_STRUCTURE] FOREIGN KEY([idstructure])
    REFERENCES [dbo].[STRUCTURE] ([IDSTRUCTURE])
    GO
    ALTER TABLE [dbo].[Besoin] CHECK CONSTRAINT [FK_Besoin_STRUCTURE]
    GO
    ALTER TABLE [dbo].[photostructure]  WITH CHECK ADD  CONSTRAINT [FK_photostructure_STRUCTURE] FOREIGN KEY([idstructure])
    REFERENCES [dbo].[STRUCTURE] ([IDSTRUCTURE])
    GO
    ALTER TABLE [dbo].[photostructure] CHECK CONSTRAINT [FK_photostructure_STRUCTURE]
    GO
    ALTER TABLE [dbo].[STRUCTURE]  WITH CHECK ADD  CONSTRAINT [FK_STRUCTUR_USER_STRU_UTILISAT] FOREIGN KEY([IDUSER])
    REFERENCES [dbo].[UTILISATEUR] ([IDUSER])
    GO
    ALTER TABLE [dbo].[STRUCTURE] CHECK CONSTRAINT [FK_STRUCTUR_USER_STRU_UTILISAT]
    GO
    Là je ne comprends plus, qu'est-ce qui permet la localisation des bâtiments ?
    En effet le but finale est de permettre a un utilisateur se trouvant dans une zone défavorisé de pouvoir la localiser via son gps. Mais pour l'instant je veux implementer cette fonctionnalité via l'adresse ip de l'ordinateur que l'utilisateur utilise d’où l'utilisation des champs latitude et longitude dans la table structure.
    Quel est le rapport entre la location et les "besoins"
    ?
    comme spécifié l'utilisateur localisera un endroit qu'il juge défavorisé ainsi il pourra spécifier les besoins de cet endroit. Sur l'application nous lui imposons pour le moment quelques catégories de besoins(Exemple:tables, chaises) d'ou la liaison entre la table Structure et besoin , ensuite besoin et Catbesoin
    Donc il n'y a que des insertions ? Jamais de mise à jour ???
    Il y'aura une fonctionnalité de mise a jour(et de suppression aussi), mais pour l'instant je me suis concentre sur l'insertion

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Merci pour ces précisions Concernant la modélisation de la base de données, ça a l'air cohérent. Pour les images, est-ce que tu stockes le chemin des photos ou les photos elles-mêmes ?

    Pour le reste, je pense que ton scénario est le bon :
    1 - Création de l'objet Batiment et insertion dans la table Batiment, et récupérer l'ID créé.
    2 - Création des autres objets et insertion dans leur table respective, en utilisant l'ID du bâtiment pour les clefs étrangères qui en ont besoin.

    La problématique de perf que tu peux rencontrer est certainement dûe à l'upload des photos. Pour améliorer ça, tu peux éventuellement mettre une contrainte sur la taille des fichiers pouvant être uploadés. Cela va forcer tes utilisateurs à diminuer la taille des photos, mais encore faut-ils qu'ils soient en mesure de le faire.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut
    Pour les images, est-ce que tu stockes le chemin des photos ou les photos elles-mêmes ?
    Je stocke le chemin des images

    En faite , la modelisation en elle meme ne me cause pas probleme, c'est plutot le traitement qui me laisse perplexe. Faire des allez retour entre le serveur et l'application pour faire des insertion risques d'etre lourd(je me dis,et ceci a travers le scenario explique tout en haut, implementer en c#). Ainsi je me demandais s'il faut que j'utilise une transaction pour faire toutes ces insertions en un seul script, ou utilise une vue. Actuellement j'utilise les classe suivante:
    - ExecuteScalar() pour recuperer l'id du batiment
    -ExecuteNonQuery() pour les autres insertion( besoin ou photo )

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par leks89 Voir le message
    Faire des allez retour entre le serveur et l'application pour faire des insertion risques d'etre lourd(je me dis,et ceci a travers le scenario explique tout en haut, implementer en c#).
    Non, c'est le fonctionnement classique.

    Citation Envoyé par leks89 Voir le message
    Ainsi je me demandais s'il faut que j'utilise une transaction pour faire toutes ces insertions en un seul script, ou utilise une vue.
    Non une vue ne te permettra pas de faire une insertion

    Pour la transaction, tu peux effectivement passer par une procédure stockée, et lui passer en paramètre l'ensemble des information pour toutes tes tables, afin de pouvoir faire l'insertion des données.

    C'est uniquement une question d'architecture au niveau de ta DAL. Il n'y aura pas de conséquence particulière au niveau des performances. A toi de choisir donc la solution qui te semble la meilleure

    A noter que tu peux aussi rajouter de l'Entity Framework, afin de pouvoir créer tes objets chacun de leur côté, puis sauvegarder l'ensemble de ces nouveaux objets en base de données directement et d'un seul coup, via la méthode SaveChanges.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. [Python 2.X] Error dans mon code d'insertion dans la base
    Par baterfly dans le forum Général Python
    Réponses: 7
    Dernier message: 16/04/2015, 10h23
  2. insertion dans une base de données
    Par youness_ka dans le forum ASP.NET
    Réponses: 1
    Dernier message: 31/07/2007, 14h51
  3. insertion dans une base de donnee
    Par killer_instinct dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 04/05/2007, 08h26
  4. [VBA] Gérer les erreurs d'insertion dans la base de données
    Par robert_trudel dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/12/2006, 12h45
  5. Réponses: 1
    Dernier message: 11/09/2006, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo