2011-08-30 4 views
1

Je suis en train d'implémenter ma propre base de données de licence, et je pensais à une idée pour la créer moi-même. Mais comme je ne suis pas très doué pour la conception de bases de données, j'espérais obtenir de l'aide (idées) avec le design.Comment puis-je concevoir au mieux cette base de données?

La façon dont je pense. J'ai besoin d'une base de données de relation un-à-plusieurs. L'idée est follolwing:

database.clients 
id (int)20, auto_increment, not null; 
Customer_Name (Varchar)255; 
email (varchar)255; 
serial (int)10; 
PRIMARY KEY id; 
UNIQUE serial; 

database.serials 
id (int)20, auto_increment, not null; 
serial (varchar)40; 
taken (int)2; 
PRIMARY KEY id; 
UNIQUE serial; 

database.online 
id (int)20, auto_increment, not null; 
serial (int)10; 
customer_name (varchar)255; 
PRIMARY KEY id; 
UNIQUE serial; 

Le tableau des publications en série sera rempli de plusieurs (quelques centaines pour commencer) publications en série ... Mon idée est que lorsqu'un client achète un permis (ou plusieurs) , ils seront enregistrés dans la table des clients avec le nom et l'email. Une série leur sera affectée, de sorte que la ligne de série dans la table des clients pointera vers la ligne d'identification de leur série désignée.

Le tableau en ligne sera utilisé lorsque le client utilise le programme. Quand ils vont en ligne, le tableau en ligne sera rempli sera l'id de la série, et le nom du client. Quand ils seront hors ligne, ils seront supprimés de la table en ligne.

La table en ligne est également là pour empêcher un client d'utiliser la même série dans plusieurs instances simultanées. S'ils veulent exécuter plus d'un client simultanément, ils devront acheter une autre série.

Et maintenant à la question .... Est-ce que je pense complètement faux? Ou est-ce un bon design? Feriez-vous quelque chose de différent? Tout ce que vous avez à dire concernant la conception de cette base de données est précieux.

Merci!

+0

plutôt que de suggérer une bonne conception laissez-moi vous demander ce que vous allez faire si descend la connexion Internet de votre serveur (à Dieu ne plaise) et votre client essaie d'utiliser le programme qu'il a acheté pour vous rendre compte qu'il ne peut pas l'utiliser parce qu'il n'y a aucun moyen de déterminer si sa série est valide ou pas contre votre base de données? Que faire si vous faites faillite? – Icarus

+0

C'est une bonne question. Cependant pas impensé de. Laissez-moi commencer à répondre à vos questions dans l'ordre que vous leur avez demandé. 1. Que faire si le serveur tombe en panne? Si le serveur tombe en panne, il n'y a pas grand chose à faire, pour lequel les clients sont préparés. Merde arrive, malheureusement. 2. Et si je fais faillite? Bien que cela puisse toujours arriver, je vais d'emblée m'assurer que le serveur web est payant, pour quelques années à venir. Et si cela ne suffisait pas, il y en a au moins quelques-uns qui, je le sais, voudraient acheter le tout comme une solution complète pour fonctionner à leur place ... – Rickard

+0

Cependant ... Si je connaissais une solution open source pour protéger le logiciel avec des publications en série, que je peux générer en utilisant un script php (il DOIT être au moins possible de générer des publications en série en utilisant PHP), alors je serais heureux de laisser aller utiliser le serveur du tout. Et surtout, une solution facile. Je programme dans csharp, et je ne suis pas trop clair. Heureusement, je n'ai pas besoin d'être pour le genre de logiciel que je vais faire. – Rickard

Répondre

0

C'est ce que je propose:

database.clients 
cl_id (int)20, auto_increment, not null; 
cl_name (varchar)255, not null; 
cl_email (varchar)255, not null; 
PRIMARY KEY cl_id; 
UNIQUE cl_email; 

database.serials 
ser_id (int)20, auto_increment, not null; 
ser_serial (char)40, not null; 
ser_taken (bit), not null; 
PRIMARY KEY ser_id; 
UNIQUE ser_serial; 

database.client_serial 
cs_id (int)20, auto_increment, not null; 
cs_client (int)20, not null; 
cs_serial (int)20, not null; 
PRIMARY KEY cs_id; 
UNIQUE cs_serial; 

database.online_clients 
oc_cs_id (int)20, not null; 
PRIMARY KEY oc_cs_id; 

S'il vous plaît assurez-vous de faire tous les champs qui ne peuvent pas contenir des valeurs NULL, non null. Cela augmente la vitesse des requêtes. J'ai aussi changé le type de la série de varchar en char, car je suppose que c'est une chaîne de taille fixe. Si ce n'est pas le cas, vous pouvez le changer en varchar.

0

Ok, maintenant laissez-moi vous propose un design pour votre db:

client 
(
clientid - int not null unique, 
name - varchar(any length you want) 
email - varchar (any length you want) 
) 

serial 
(
serialid - int not null unique 
serialnumber - varchar any length you want - unique 
) 

You will only insert records in this table when a client purchases a license 
client_serial_purchased 
(
clientid - foreign key of the clients table 
serialid - foreign key of the serials table 
(clientid,serialid) - primary key of this table 
) 

online 
(
clientid 
serialid 
) 
Questions connexes