2010-10-05 9 views
1

je suis maintenant à récurer ma tête pendant des heures pour résoudre THW situation suivante:Tenue côté unique et le serveur client de id côté

Plusieurs Html formulaires sur une page Web sont identifiés par un identifiant. Les utilisateurs peuvent créer eux-mêmes des formulaires du côté des clients et remplir des données. Comment puis-je garantir que l'identifiant de la forme que l'utilisateur génère est unique et qu'il n'y a pas de collision dans le processus d'enregistrement parce que le même identifiant a été généré par le client de quelqu'un d'autre.

Les problèmes/questions:

  • Une fonction aléatoire sur le côté client pourrait revenir id identiques sur deux clients
  • Vous cherchez la table SQL pour id libre wouldnt résoudre le problème
  • Autoincrement un nouvel identifiant compliquerait l'ensemble du processus car l'identifiant DOM et l'identifiant SQL diffèrent donc nous arrivons au point suivant:
  • Une "jointure à gauche" pour combiner dom_id et user_id pour identifier les formes dans la base de données tueur de performance ea parce que j'attendre ces tables seront énormes

La question (formé aussi simple que je peux):

Est-il possible que le client peut créer/chercher un identifiant unique qui être utilisé plus tard comme clé primaire pour une entrée de base de données sans collisions? Quelle est la meilleure pratique?

Ma solution actuelle (mauvaise):

Aucun id unique de tout pour identifier les formes. Toujours une combinaison à travers une jointure à gauche pour identifier les formulaires générés par l'utilisateur spécifique. Mais que se passe-t-il si l'utilisateur dit: Supprimer mon compte (et mon user_id) mais laisser les données sur le serveur. Je perdrais l'id d'utilisateur et cette question ne fonctionnerait plus ...

Je suis vraiment désolé que je ne pourrais pas l'expliquer d'une autre manière. Mais j'espère que quelqu'un a compris ce que je suis confronté et pourrait me donner au moins un indice

MERCI BEAUCOUP!

Répondre

2

GUID (Globally Unique IDentifiers) peut aider. Voir http://en.wikipedia.org/wiki/GUID

Pour chaque formulaire, le client peut générer un nouveau GUID. Théoriquement, cela devrait être unique.

+0

Merci pour le conseil ... Pensez que je pourrais utiliser cette fonction: http: //php.net/manual/en/function.uniqid.php Jamais entendu parler auparavant.Mais je pense que l'utiliser avec un préfixe combiné: user_database_auo_increment_iteration_index + user_id pourrait être la chose la plus savoureuse. – Bosh

0

Je ne montre juste pas d'ID à l'utilisateur tant qu'il n'a pas soumis quelque chose, à quel point il voit l'ID d'incrémentation automatique généré. Ça garde les choses simples. Si toutefois vous avez vraiment besoin, vous pouvez utiliser une table de séquence, mais il a quelques réserves qui me font le déconseille:

CREATE TABLE sequence (id integer default 0, sequencename varchar(32)); 

incrémenter:

UPDATE sequence 
SET id = @generated := id + 1 
WHERE sequencename = 'yoursequencename'; 

Obtenir:

SELECT @generated; 
Questions connexes