Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Mysql] Consiglio su stuttura tabelle per gestione multipla record

    ciao!

    provo a spiegare la mia problematica, anche se non sarà facile.
    ho una tabella articoli composta così (la semplifico):
    codice:
    articolo_id
    articolo_modello
    articolo_abilitato (campo tinyint 0/1)
    il programma lato server che gestisce il campo articolo_abilitato è solo per amministratori.
    quindi se abilito / disabilito un articolo, vale per tutti i rappresentanti e clienti che visualizzano gli articoli sul gestionale.

    ora, mi è stato richiesto di fare in modo che alcuni rappresentanti possano gestire quel campo in autonomia (in quanto hanno un magazzino proprio).
    io stavo pensando di creare una tabella composta in maniera simile a questa:
    codice:
    art_id (collegato alla tabella articoli, campo articolo_id)
    art_magazzino (un campo char(2) in modo che sia descrittivo)
    art_abilitato (campo tinyint 0/1)
    poi, in un'altra tabella, collego lo username al campo art_magazzino, e lo salvo in sessione in fase di login.
    in questo modo posso fare una query del tipo:
    codice:
    SELECT * FROM articoli
    INNER JOIN articoli_ab ON art_id = articolo_id
    WHERE art_magazzino = 'VARIABILE SESSIONE' AND art_abilitato = 1
    ammesso che mi sia riuscito a spiegare, potrebbe andare come soluzione per voi???

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Farei cosi :

    Una tabella articoli abilitati/disabilitati come hai fatto.
    Una tabella articoli esclusi dalla disabilizazione come hai fatto ma senza il campo art_abilitato. In effetti la sola presenza di un record nella tabella ne garanstisce l'esclusione.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    si però c'è qualcosa che mi sfugge.

    io potrei avere un articolo così:
    codice:
    - magazzino_1 -> disabiliatato
    - magazzino_2 -> disabiliatato
    - magazzino_3 -> abiliatato
    quindi tu mi dici che nella seconda tabella dovrei mettere solo il record:
    codice:
    articolo_id | magazzino_1
    in questo modo, usando delle join, non troverebbe l'articolo e non sarebbe visualizzato.
    il programma di modifica abilitato / disabilitato, a quelo punto, andrebbe ad aggiungere / rimuovere il recordo invece di modificare il campo art_abilitato.
    corretto??

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Yes.

    Hai sempre la tabella "principale" che indica se un articolo è abilitato o meno.

    Se un articolo e abilitato allora non occorre avere un record nella tabella.

    In questo modo ti semplifichi anche lo sviluppo.

    Esempio di query :

    codice:
    SELECT * FROM `articoli` a
    WHERE `articolo_abilitato` = 1 or 
    (`articolo_abilitato` = 0 and EXISTS (
        SELECT * from articoli_esclusi e 
        where  a.articolo_id = e.articolo_id AND
        e.art_magazzino = '15'
        )
    )
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    ok ho capito.

    solo che nel mio caso penso che ragiono al contrario.
    nel senso che il flag articolo_abilitato nella tabella articoli (quella principale) non avrebbe molto senso di esistere.
    in quanto non è possibile che un articolo sia abilitato / disabilitato per tutti i magazzini contemporaneamente.

    ognuno si deve gestire quel flag in completa autonomia.
    quindi mi viene da pensare di usare quella tabelle come hai detto te (senza flag), ma di non passare per il campo articolo_abilitato.

    in teoria basterebbe fare una join tra le due tabelle.
    se l'articolo non c'è, la join non lo tira fuori!

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Dipende da quanti attori e articoli hai. Se ne hai parecchi significa che quando crei un nuovo articolo lo devi aprire per tutti gli attori. Se crei un nuovo attore devi aprirgli tutti gli articoli.
    Io sarei propenso a fare come ho scritto nel senso che ottimizzi i dati e semplifichi anche la programmazione.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    io pure farei come dici te, ma la richiesta è espressamente quella che ogni attore si deve gestire quel flag in completa autonomia.
    e quindi non deve esistere un flag unico che valga per tutti (non è un caso previsto).

    in sostanza, per farla semplice, è come se nella tabella articoli dovessi avere tre campi del genere (3 al momento, un giorno potrebbero diventare anche 10):
    codice:
    - articolo_id
    - articolo_abilitato_magazzino_1
    - articolo_abilitato_magazzino_2
    - articolo_abilitato_magazzino_3
    - articolo_abilitato_magazzino_N
    (lo dico solo a livello teorico, non è una cosa che farei mai questa qua sopra).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.