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

Développement SQL Server Discussion :

Première utilisation d'un Trigger


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 210
    Par défaut Première utilisation d'un Trigger
    Bonjour,

    je n'ai jamais encore utilisé de Trigger et j'ai un cas de figure qui me semble en nécessiter un :

    on a un stockage de fichier en blob dans la table FileTable :

    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
    CREATE TABLE [dbo].[FileTable](
    	[Compteur] [int] IDENTITY(1,1) NOT NULL,
    	[UID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_FileTable_UID]  DEFAULT (newid()),
    	[FileName] [nvarchar](100) NOT NULL,
    	[DataField] [image] NULL,
    	[Partial] [tinyint] NOT NULL,
    	[MimeType] [nvarchar](100) NULL,
    	[Created] [datetime] NOT NULL CONSTRAINT [DF_FileTable_Created]  DEFAULT (getdate()),
    	[Expediteur] [int] NULL,
    	[IpClient] [varchar](50) NULL,
    	[Taille] [bigint] NULL,
    	[Histo] [bit] NULL CONSTRAINT [DF_FileTable_Histo]  DEFAULT ((1)),
    	[Effacer] [bit] NULL CONSTRAINT [DF_FileTable_Effacer]  DEFAULT ((0)),
     CONSTRAINT [PK__FileTable__34C8D9D1] PRIMARY KEY CLUSTERED 
    (
    	[Compteur] 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]
    lorsque l'on veut supprimer un fichier de la base, on ne supprime pas l'enregistrement, on update le champs [DataField] avec la valeur NULL (on veut garder un log).

    Cela fonctionne très bien sauf quand le fichier est très gros, le traitement est trop long et provoque des erreurs de timeout avec l'interface.

    Pour contourner cela, j'ai créé le champ binaire [Effacer].

    là, j'ai 2 alternatives :
    1- un trigger qui se déclenche lorsque l'on update [Effacer] avec la valeur 1 et qui update le champs [DataField] avec la valeur NULL
    2- un Job de l'agent SQL serveur qui toutes les 10 minutes traite les enregistrements dont le champs [Effacer] a la valeur 1

    Qu'en pensez-vous ?

    merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    Bonjour,

    si tu ne veux pas impacter l'utilisation de l'interface du client, je te conseillerai de décoréler les deux actions; c'est-à-dire d'utiliser ta deuxième solution.

    Par contre, je te conseillerai de ne pas conserver des fichier en base de données. Il est plus iontéressant de les conserver dans des répertoires dédiés sur un serveur et de stocker le chemin relatif d'accès au fichier dans ta base de données. De cette manière tu optimises le temps d'exécution de tes requêtes.

    C'est juste une opinion, tout dépend de ton contexte applicatif.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 210
    Par défaut
    merci pour ton avis éclairé !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 03/09/2006, 18h26
  2. Première utilisation d'Hibernate
    Par hdd dans le forum Hibernate
    Réponses: 2
    Dernier message: 03/06/2006, 21h02
  3. [FLASH 8] Première utilisation de composant
    Par Destiny dans le forum Flash
    Réponses: 3
    Dernier message: 24/03/2006, 12h35
  4. Première utilisation
    Par SamDaKap dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/11/2002, 14h22

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