Mantenere diversi dati degli utenti nello stesso database

-2

Sono un nuovo programmatore web di frontend. e di recente ho programmato alcuni tipi di applicazioni mobili basate sul web (significa originariamente sviluppate sul web usando angularJS e ho usato uno strumento per creare file .apk) fondamentalmente per me stesso. Queste applicazioni includono "Creazione lista acquisti", "Confronto prezzi", "Cose da fare" e "Calcolatore delle letture di allineamento della pompa del motore". Ma queste applicazioni sono limitate a me stesso. Ma voglio che ogni altro utente sia in grado di usarlo. Il problema è che il mio piano di web hosting consente solo 5 database. Quindi non posso creare un nuovo database per ogni nuovo utente. Quindi, per favore aiutami e suggeriscimi come possono essere memorizzati separatamente tutti i dati degli utenti.
Un esempio: Quando devo creare una nuova lista della spesa, dovrebbe trovarsi in una nuova tabella. Per solo io, non è un problema, ma supponiamo che ci siano 200 utenti (ad esempio i miei amici e familiari), quindi come lo gestirò ...?

Ecco un codice molto breve e semplice per la correzione del concetto che illustra come viene creata una nuova lista della spesa.
ِHTML:
<input type="text" ng-model="newItem" /><button ng-click="add()">Add</button>

JS:

var app = angular.module("app",[]);
app.controller("myCtrl",function($scope,$http) {
$http.post(
"inser.php",
{'listItem':$scope.newItem}
).then(function(response) {
$scope.showdata = response.data;
})
});

PHP:

    $connect = new mysqli("host","user","pass","db");
$data = json_decode(file_get_contents("php://input"));
$list_item = $data->listItem;
$insert = $connect->query("insert into TableName (coloumn) values ('$value')");

In questo caso, un database e una tabella sono già assegnati alla query. ed è facile ma per un'esperienza utente dinamica, non riesco a farmi un'idea.

    
posta kashif Riaz 11.03.2018 - 04:42
fonte

3 risposte

3

The What

È l'applicazione che cresce da utente singolo a utente multiplo. Il database deve diventare più sofisticato per gestirlo. Ma hai ancora bisogno di un solo database per un'applicazione web.

Devi identificare l'utente ("[email protected]", "[email protected]").

Bisogna pronosticare che sarà necessario autenticare l'utente (password?) e autorizzare l'accesso (admin? power user? utente standard?).

The How

Altre colonne. Chiavi primarie Chiavi esterne.

Ad esempio hai già colpito il muro con questo "Quando devo creare una nuova lista della spesa, allora dovrebbe essere in una nuova tabella". Questo approccio non scala.

Fai:

CREATE TABLE shoplist (
   item VARCHAR 
);

Pensa a questo:

CREATE TABLE shoplist (
   shoplist_id   NUMBER PRIMARY KEY,
   item          VARCHAR 
);

Ora pensa a questo:

CREATE TABLE shoplist (
   shoplist_id   NUMBER PRIMARY KEY,
   item          VARCHAR,
   item_quantity NUMBER 
);

Ora pensa a questo:

CREATE TABLE shoplist (
   shoplist_id   NUMBER PRIMARY KEY,
   owner_login   VARCHAR,
   item          VARCHAR,
   item_quantity NUMBER 
);

-- one table holds many shoplists for many users, how to show them:
SELECT item, item_quantity
FROM shoplist
WHERE    owner_login = '[email protected]'
ORDER BY  shoplist_id;

Ora pensa a questo:

CREATE TABLE shoplist (
   shoplist_id   NUMBER PRIMARY KEY,
   owner_login   VARCHAR, // declare it a foreign key - the value always in (SELECT login FROM users)
   item          VARCHAR,
   item_quantity NUMBER 
);
CREATE TABLE users (
   login         VARCHAR PRIMARY KEY,
   salt          VARCHAR,
   password_hash VARCHAR,
   is_admin      VARCHAR
);
    
risposta data 11.03.2018 - 08:01
fonte
0

Hai solo bisogno di un database sul back-end.

Gli utenti si autenticano al server web , non al database. Il server web si connette al database, non a un utente.

SUGGERIMENTO:

  1. Crea una tabella DB per "utenti" e un'altra per "gruppi".

  2. Associa gli utenti a uno o più gruppi e associa i "privilegi di accesso" ai tuoi gruppi.

  3. Modificare il codice lato server per eseguire un "join" SQL per mappare l'accesso utente :: gruppo :: prima di effettuare la selezione, l'aggiornamento o l'eliminazione effettivi.

    Se il join restituisce 0 righe per l'utente autenticato ... a quell'utente non viene concesso l'accesso per effettuare il seguente "inserimento".

  4. MAI prova a creare SQL o "connetti" il DB dal client.

    SEMPRE fai in modo che il client invochi il codice lato server che comunica con il database per loro conto.

    Che, come succede, è ESATTAMENTE come hai già fatto nel frammento di PHP sopra. Tutto quello che devi fare è modificare il tuo PHP per verificare l'accesso, prima che faccia il "insert".

risposta data 11.03.2018 - 05:33
fonte
0

La risposta è che non dovrebbe creare una nuova tabella. Pensa non a 200 utenti, ma a un milione. Un buon database su un buon server non ha problemi a gestire una tabella con liste della spesa per un milione di utenti, ecco come sono progettati i database. Gestire un milione di tabelle, ora che è un problema.

    
risposta data 11.03.2018 - 16:21
fonte

Leggi altre domande sui tag