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

MS SQL Server Discussion :

Structure SQL relative à de la vente de spectacle / jauges


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Structure SQL relative à de la vente de spectacle / jauges
    Bonsoir, J'aurai souhaité un retour d'expérience, conseil sur une structure SQL correspondant au besoin vulgarisé suivant :

    Prenons l'exemple d'un spectacle se déroulant quotidiennement avec une trentaine de séances par jour. (La capacité globale est portée à 10000 : Seance.Se_jaugeglobale = 10000)
    Lors de la réservation du spectable tant que celle-ci n'est pas confirmée par un paiement, nous devons bloquer la quantité demandée afin de ne pas provoquer un surbooking. (Panier moyen de 5 personnes ; PanierContenu.Pc_quantite = 5 ; V_SeanceRestante.Sr_jaugerestante = 9995)
    Le panier peut-être abandonné par l'internaute ou libéré automatiquement au bout de x minutes d'inactivité. (Via Delete du Panier en question)
    Une fois confirmé par son paiement, le panier est supprimé et transformé en vente effective ; la jauge est recalculée dans la table Séance. (Seance.Se_jaugeglobale = 10000, VenteContenu.Vc_quantite = 5, V_SeanceRestante.Sr_jaugerestante = 9995)

    Actuellement, nous utilisons une vue SQL pour fournir la disponibilité restante

    Structure allégée :

    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
     
    CREATE SCHEMA [test]
    GO
     
    CREATE TABLE [test].[Seance](
    	[Se_id] [bigint] NOT NULL,
    	[Se_dhdebut] [datetime] NOT NULL,
    	[Se_dhfin] [datetime] NOT NULL,
    	[Se_jaugeglobale] [int] NOT NULL,
    	[Se_jaugeventes] [int] NOT NULL)
    GO
     
    CREATE TABLE [test].[Vente](
    	[Ve_id] [bigint] NOT NULL,
    	[fk_poste] [bigint] NULL,
    	[fk_operateur] [bigint] NULL,
    	[Ve_dhcreation] [datetime] NULL)
    GO
     
    CREATE TABLE [test].[VenteContenu](
    	[Vc_id] [bigint] NOT NULL,
    	[fk_vente] [bigint] NULL,
    	[fk_seance] [bigint] NULL,
    	[Vc_quantite] [int] NULL)
    GO
     
    CREATE TABLE [test].[Panier](
    	[Pa_id] [bigint] NOT NULL,
    	[fk_poste] [bigint] NULL,
    	[fk_operateur] [bigint] NULL,
    	[Pa_dhcreation] [datetime] NULL)
    GO
     
    CREATE TABLE [test].[PanierContenu](
    	[Pc_id] [bigint] NOT NULL,
    	[fk_panier] [bigint] NULL,
    	[fk_seance] [bigint] NULL,
    	[Pc_quantite] [int] NULL)
    GO
     
    CREATE VIEW [test].[V_SeanceRestante] AS
    SELECT
    	se.Se_id as fk_seance,
    	se.fk_salle,
    	se.Se_dhdebut as Sr_datedebut,
    	se.Se_dhfin as Sr_heurefin,
    	isnull(se.Se_jaugeglobale,0) as Sr_jaugeglobale,
    	isnull(se.Se_jaugeglobale,0)-isnull(se.Se_jaugeventes,0)-isnull(TAB_pc.Se_jaugepaniers,0) as Sr_jaugerestante    
    FROM 
    	[test].[Seance] se
      	LEFT JOIN (select pc.fk_seance, SUM(Pc_quantite) as Se_jaugepaniers from [test].[PanierContenu] pc group by pc.fk_seance) AS TAB_pc ON TAB_pc.fk_seance = se.Se_id 								
    GO

    Nous avions choisi ce modèle afin d'éviter trop d'écritures dans la table Seance qui est déjà fortement sollicitée sur l'update de la colonne Seance.Se_jaugeventes.


    Nous rencontrons cependant ponctuellement des latences (20 secondes maxi) lors de la consultation de cette vue et systématiquement proportionnelles au nombre de paniers ; la libération automatisée de paniers abandonnés toutes les x minutes (DELETE Paniers dont la durée de vie est supérieure à x minutes) provoquent également des latences. Le modèle présentée est allégée, nous gérons des sous niveaux permettant de privatiser spécifiquement une partie de la jauge globale à certains canaux de ventes en fonction de x critères, etc... Une vue est également présente pour les sous-niveaux.


    Une des hypothèses envisagées serait d’éprouver le stockage de la somme des quantités correspondants aux paniers également dans la table Séance et ainsi d'éviter l'utilisation de la vue.

    Pourriez-vous me fournir des pistes sur ce sujet ? Quels seraient le modèle idéal selon vos retours d'expérience (Une refonte pourrait-être envisageable)

    En vous remerciant par avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pas de clefs primaires, d'indexes et de clefs étrangères ?

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour, comme évoqué il s'agit d'une structure allégée ; nous avons une PK Clustered par table, des FK systématique, et différents index ajoutés de manière empirique en fonction des consultations des statistiques SQL et de l'efficience apportée.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 759
    Points : 52 540
    Points
    52 540
    Billets dans le blog
    5
    Par défaut
    Sans aucune contrainte votre système va s'auto bloquer…..

    Pour être efficace un système de vente à stock défini, comme c'est le cas des places de spectacle ne devrait pas avoir de notion de panier, mais travailler directement sur un état des places vendues pour un événement.

    Une place dans une salle à une date peut être vendue, en cours d'achat, libre. Le seul pilotage de cet état avec des références au client suffit et simplifie toutes les requêtes.
    Vous pouvez enfin, ajouter une vue indexées pour l'état du stock (libre, en cours d'achat, acheté).

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Merci pour ces différentes réponses,

    Point 1 : Qu'entendez-vous par "Sans aucune contrainte votre système va s'auto bloquer" ? Si vous parlez de la structure allégée, celle-ci ne présente effectivement par les PK, FK, UK que nous avons sur notre structure réelle. Ces contraintes sont donc bien existantes à ce jour.
    Point 2 : Notre produit ne réalise pas systématiquement de placement physique au numéro de place prêt (j'ai peut-être induit votre réponse sur mon premier message) ; en reprenant ma structure allégée, qu'indiqueriez vous pour gérer uniquement cette partie de stock qui est réservée via les paniers. Stockage physique de la somme des qté de paniers dans la table séance ou Vue indexée décrementant les Paniers en cours ?

    Merci de vos retours

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/06/2012, 13h32
  2. [phpMyAdmin] comment exporter la structure SQL des VIEW et dans le bon ordre ?
    Par Ekimasu dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 16/03/2009, 11h51
  3. [moteur de recherche] dictionnaire synonymes, structure sql
    Par vasilov dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 09/09/2008, 12h59
  4. Avantage Désavantage structuration de Table SQL
    Par jflebegue dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 01/12/2004, 18h40
  5. [SQL Access] Modifier la structure d'une table
    Par Le Lézard dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/06/2004, 14h03

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