Nella mia formazione mi è stato detto che è un'idea imperfetta esporre all'utente le chiavi primarie effettive (non solo chiavi DB, ma tutti gli accessori principali).
Ho sempre pensato che fosse un problema di sicurezza (perché un utente malintenzionato poteva tentare di leggere cose non proprie).
Ora devo verificare se l'utente è autorizzato ad accedere comunque, quindi c'è un motivo diverso dietro di esso?
Inoltre, poiché i miei utenti devono comunque accedere ai dati, dovrò disporre di una chiave pubblica per il mondo esterno da qualche parte nel mezzo. Ora quella chiave pubblica ha gli stessi problemi della chiave primaria, non è vero?
C'è stata la richiesta di un esempio sul perché farlo comunque, quindi eccone uno. Tieni presente che la domanda dovrebbe riguardare il principio stesso non solo se si applica in questo esempio. Le risposte che affrontano altre situazioni sono esplicitamente benvenute.
Applicazione (Web, Mobile) che gestisce l'attività, ha più UI e almeno un'API automatizzata per la comunicazione tra sistemi (eG il reparto contabilità vuole sapere quanto addebitare al cliente in base a ciò che è stato fatto). L'applicazione ha più clienti, quindi la separazione dei loro dati (logicamente, i dati sono memorizzati nello stesso DB) è un must del sistema. Ogni richiesta sarà verificata per la validità, qualunque cosa accada.
L'attività è granulare molto fine, quindi è unita in alcuni oggetti contenitore, chiamiamola "Task".
Tre casi d'uso:
- L'utente A desidera inviare l'utente B a qualche attività, quindi gli invia un collegamento (HTTP) per svolgere alcune attività lì.
- L'utente B deve uscire dall'edificio, quindi apre l'attività sul suo dispositivo mobile.
- La contabilità vuole addebitare al cliente l'attività, ma utilizza un sistema di contabilità di terze parti che carica automaticamente l'attività / attività con un codice che fa riferimento al REST - API dell'applicazione
Ciascuno dei casi d'uso richiede (o diventa più semplice se) l'agente di avere un identificatore indirizzabile per l'attività e l'attività.
ON UPDATE CASCADE
stato creato per questo (mysql specifico?), anche se se il problema è la sicurezza, il controllo degli accessi dovrebbe essere sul backend e non fidarsi comunque dell'utente