我正在实施自己的许可证数据库,并且正在考虑自己创建一个想法。 但由于我并不擅长设计数据库,所以我希望能够获得设计方面的一些帮助(想法)。
我的想法。我需要一对多的关系数据库。 这个想法是关键:
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;
序列表将填充几个(几百个开头)系列... 我的想法是,当客户购买一个(或几个)许可证时,他们将在客户表中注册名称和电子邮件。 将为它们指定一个序列号,因此clients表中的序列行将指向其指定序列的id行。
当客户使用该程序时,将使用在线表格。 当他们上线时,将填写在线表格中的序列号和客户名称。 当他们离线时,他们将被从在线表中删除。
在线表也用于防止客户在多个同时发生的实例中使用相同的序列。 如果他们想要同时运行多个客户端,他们将不得不购买另一个客户端。
现在问题...... 我觉得完全错了吗?或者这是一个很好的设计? 你会做点什么吗? 关于如何设计这个数据库,你必须说些什么是有价值的。
谢谢!
答案 0 :(得分: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值的字段,而不是null。这样可以提高查询速度。此外,我将序列的类型从varchar更改为char,因为我认为它是一个固定大小的字符串。如果不是这种情况,您可以将其更改回varchar。
答案 1 :(得分: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
)