2011-08-30 54 views
1

我正在实施自己的许可证数据库,并正在考虑自己制作一个想法。但是由于我在设计数据库方面并不擅长,我希望能够在设计中获得一些帮助(想法)。我该如何最好地设计这个数据库?

我在想什么。我需要一个一对多的关系数据库。 的想法是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; 

连续剧表将充满一些(几百到开始)连续... 我的想法是,当一个客户购买一个(或几个)许可证,他们将通过姓名和电子邮件在客户表中注册。 一个序列将被指定给它们,所以客户表中的序列行将指向他们指定序列的id行。

客户使用该程序时将使用在线表格。 当他们上线时,在线表格将填入序列号和客户名称。 当他们脱机时,他们将从联机表中删除。

在线表也可以防止客户在多个同时发生的情况下使用相同的串行。 如果他们想要同时运行多个客户端,则必须购买另一个客户端。

而现在的问题.... 我在想完全错误?或者这是一个很好的设计? 你会做任何不同的事情吗? 关于如何设计这个数据库,你必须说的任何东西都是有价值的。

谢谢!

+0

,而不是暗示一个不错的设计让我问你你有什么打算,如果你的服务器的网络连接中断做(上帝保佑)和你的客户试图使用他向你购买的程序发现他不能使用它,因为没有办法确定他的系列文件是否有效或者是否对你的数据库有效?如果你停业怎么办? – Icarus

+0

这是一个很好的问题。然而不是没有想到的。让我按照你问他们的顺序开始回答你的问题。1.如果服务器停机怎么办?如果服务器出现故障,客户无法做好准备。不幸的是,糟透了。 2.如果我停业,该怎么办?虽然这可能会一直发生,但我会从一开始就确保Web服务器在未来几年内获得支付。如果它还不够,至少有一些我知道会想把整个事情作为一个完整的解决方案来为自己运行... – Rickard

+0

但是...如果我知道开源解决方案来保护我可以使用PHP脚本(必须至少可以使用PHP生成序列号)生成序列号软件,然后我会很高兴放弃使用服务器。首先,一个简单的解决方案。我是用csharp编程的,而且我不太明白。幸运的是,我不需要为我将要制作的那种软件。 – Rickard

回答

0

这是我的建议:

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; 

请务必使不能包含NULL值,而不是空各个领域。这增加了查询的速度。另外我更改了从varchar到char的序列类型,因为我认为它是一个固定大小的字符串。如果不是这种情况,您可以将其更改回varchar。

0

好了,现在让我建议为你的数据库设计:

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 
)