È possibile mantenere un solo database per applicazioni web e desktop?

2

Sto riscontrando problemi con il mio modello di business, lasciami spiegare meglio.

Sto sviluppando un software per 1 anno e pochi mesi, è per l'industria alimentare, più esattamente un software per: Consegna, Take Way, Prenotazione tavolo, POS, Contabilità fornitori e Ricevute, Stampe (ricevuta) , Kitchen Monitors, ordini, controllo ordini clienti e area fiscale.

Bene, avevo separato il software principalmente in due aree, una è un'area web e l'altra è l'area desktop (utilizzata solo dagli amministratori) e installata localmente.

1 - Area Web (in pratica fai quanto segue:)

  • Mostra catalogo con i prodotti
  • I clienti eseguono ordini
  • I clienti pagano per gli ordini
  • ecc. come menzionato sopra

2 - Area desktop

  • Gestisci ordini
  • Gestisci clienti
  • Gestisci i fornitori
  • Gestisci clienti pagabili e ricevibili
  • ecc. come menzionato sopra

L'area web è ospitata in un server Web online (script e database sono online). L'area del desktop è ospitata localmente in una macchina Linux con un database locale e file di script locali.

La mia domanda è: È possibile mantenere un solo database per entrambe le applicazioni? Se SÌ, per favore qual è l'approccio migliore?

Segui il mio ambiente delle specifiche tecniche

Database: In realtà ho due database funzionanti e mi piacerebbe tenerne solo uno.

Sistema operativo: Linux (Kernel 2.6.X e versioni successive) o Windows (XP e versioni successive)

Per l'area Web

  • Apache, PHP, Python, Java Script, Shell Script e MySQL.

Per l'area del desktop:

  • PHP-GTK2, Apache, PHP, MySQL e Shell Script.

Informazioni aggiuntive sul sistema [EDITED]

Gli scopi principali per avere un ambiente desktop sono:

  1. Ho bisogno di stampare e distribuire il buono fiscale su ogni nuovo ordine.
  2. Ho il cassetto.
  3. Ho un lettore seriale (codice a barre).
  4. Ho un terminale per richiedere informazioni.
  5. e poche altre cose che è così difficile se non impossibile da fare nell'ambiente web.

Schema relazionale del desktop: 104 tabelle. Schema relazionale Web: 42 tabelle.

  1. Le autorizzazioni vengono assegnate in base a: Rifiuta tutto per impostazione predefinita e assegna se necessario.
  2. (Validazione / disinfezione) è già stato fatto nell'applicazione web.
  3. Fino ad ora le prestazioni non sono un problema, dal momento che ogni anno fiscale parte del mio database verrà archiviato. (Anche i clienti, i fornitori e tutti i relativi dati relativi saranno archiviati dopo 3 anni di inattività).

Il mio vero problema è che oggi ho 2 ambienti e mi piacerebbe avere solo 1. Quindi "unire" entrambi i mondi in uno è un'opzione, ma non è sicuro. Mi piacerebbe leggere qui molte idee su questo argomento.

Osservazione sul processo: oggi è in funzione e funziona bene, ma mi sembra di perdere tempo in qualche processo.

Dai uno sguardo allo scenario:

  1. L'ordine viene effettuato su Internet, quindi memorizzato nel mio database Web.
  2. L'ordine viene inviato in cucina e preparato.
  3. Stampa una ricevuta (Coupon fiscale), inseriscila con l'ordine e la consegna al cliente.
  4. Un tagliando fiscale viene generato dal mio ambiente desktop e richiede una chiamata alla tabella degli ordini, ma non è la tabella degli ordini Web ma una tabella degli ordini desktop.

In poche parole ho bisogno di generare nuovamente l'ordine per riempire il tagliando fiscale. Lo stesso vale per il registro clienti, il registro fornitori e pochi altri articoli.

Spero che questa informazione possa rendere la mia domanda più leggibile. Grazie ancora!

    
posta deepcell 25.09.2012 - 01:45
fonte

6 risposte

12

Risposta breve: avresti sicuramente meno mal di testa con un singolo database.

Altrimenti, potresti finire con problemi di sincronizzazione dei record, così come con i duplicati dei record, in tutti i database locali che potresti utilizzare.

Ciò di cui hai bisogno è solo creare un DAL (livello di accesso ai dati) e fai in modo che le tue applicazioni client (desktop, wen, mobile, ecc.) accedano al tuo database tramite il tuo DAL.

    
risposta data 25.09.2012 - 05:47
fonte
4

Sì, è possibile. E posso anche aggiungere che dovrebbe essere per facilitare la manutenzione e le modifiche.

Mentre leggo le tue specifiche, è molto probabile che si sviluppi utilizzando un singolo database, dato che stai usando MySQL e leggero e facile da avviare. No, non puoi affermare che MySQL è solo per applicazioni web. Molte applicazioni ci sono del dominio di prodotti e strumenti che la stanno usando.

Ci sono configurazioni corrispondenti che devono essere impostate per le connessioni dirette del database. Tuttavia, l'applicazione Desktop è connessa al server host pubblico con un IP statico per consentire all'utente di eseguire questa operazione e richiedere all'applicazione Desktop di stabilire una connessione.

Potrei anche aggiungere che se non vuoi passare attraverso queste noiose configurazioni, puoi avere un servizio Web per il tuo desktop per eseguire le manipolazioni desiderate del database.

Aggiungi il tuo servizio web potrebbe utilizzare JSON o XML per una migliore analisi.

    
risposta data 29.01.2014 - 07:28
fonte
3

Sembra che gli ordini siano comuni a entrambi i database - se è così allora ha senso usare l'unico database comune in quanto non è necessario sincronizzare i due. Se non c'è comunanza nei dati, quindi tenerli separati.

Un paio di cose se le vuoi raggruppare in un unico database.

1) Creare un accesso separato per le applicazioni Web e desktop. In questo modo sarà più facile eseguire il debug dei problemi utilizzando gli strumenti di tracciamento. Assegna le autorizzazioni di accesso in base a ciò a cui ogni utente deve avere accesso.

2) Costruisci un livello dati e consenti al sito web di accedere al database chiamando le stored procedure - Questo aiuterà a prevenire attacchi SQL injection. Questa potrebbe essere una libreria condivisa tra i due.

3) Se le prestazioni diventano un problema, allora dovresti essere in grado di spostare le tabelle meno utilizzate su un altro disco fisico (sospetto che le tabelle Account e fornitori). Considerare quindi nella fase di progettazione se è necessario avere uno schema separato (si collega al punto 1 per quanto riguarda le autorizzazioni) per le tabelle transazionali e non transazionali.

    
risposta data 25.09.2012 - 02:04
fonte
2

È valido condividere lo stesso database tra app desktop e app web. Tuttavia, non vedo perché sia necessaria la tecnologia desktop. Hai 2 diversi gruppi di funzioni che hanno utenti diversi ma che non richiede l'utilizzo di un ambiente applicativo desktop e web. Di solito c'è un vantaggio nel nascondere il tuo database dal web se non devi averlo lì. Tuttavia, molti accettano il rischio dopo aver implementato le normali misure di sicurezza, che sono comunque necessarie per la parte web dell'applicazione. Ci sono diversi problemi con l'avere più ambienti così, con l'elaborazione in batch a parte, non penso che tu abbia mostrato requisiti stringenti perché la funzionalità desktop è obbligatoria nella tua domanda e, di conseguenza, non vedo che ci sia un caso per 2 diversi ambienti, tutte le funzioni elencate possono essere gestite in ambiente Web (ad eccezione dell'elaborazione batch che non è chiaramente dettagliata).

    
risposta data 25.09.2012 - 02:17
fonte
2

Certo che è possibile, mySQL è un server di database ed è progettato per supportare connessioni da più fonti, siano esse locali o remote.

Tuttavia, quando installato su un host web, per impostazione predefinita mySQL è in genere configurato per consentire solo connessioni locali per motivi di sicurezza. C'è un'impostazione nel file di configurazione per abilitare / disabilitare le connessioni remote, dovrai impostarlo di conseguenza.

Vedi: Come abilitare Remote Accesso al server di database MySQL? per i dettagli.

    
risposta data 25.09.2012 - 17:13
fonte
2

Potresti anche considerare un terzo approccio, un singolo database e una web API per l'applicazione per accedere alle informazioni.

In questo modo non è necessario esporre direttamente il tuo SQLServer a fonti esterne e gestire meglio l'accesso dell'applicazione.

È anche più semplice aggiornare un'API Web alle modifiche nella struttura del database piuttosto che ridistribuire l'applicazione desktop ogni volta.

    
risposta data 08.01.2014 - 13:44
fonte

Leggi altre domande sui tag