我应该如何为不同的用户设计我的数据库有不同的设备?

时间:2017-05-25 15:59:49

标签: mysql database-design

我对数据库设计感到困惑。

这是我的要求:有不同的用户;用户可以拥有一个或多个设备。一些用户将拥有数千台设备甚至一万台设备。设备有许多操作记录。有一天会增加10-20个操作记录。

我准备为用户记录userId,passWord创建一个表。不同的用户创建不同的设备列表记录deviceNum,devicState。设备具有操作表记录操作记录。

所以,我的数据库会有很多表。我想我有十万个设备。我应该创建十万个设备表吗?

2 个答案:

答案 0 :(得分:0)

从你说过你只需要3张桌子:

Devices

所有用户都会转到第一个表格,其中包含地址,电话,上次登录时间等用户数据所需的其他字段。

所有设备都注册到SELECT表中,每个设备都与拥有它的用户 - user_id相关联。您可以根据需要制作尽可能多的列 - 例如设备类型,设备名称,参数,工作时间等......

所有记录都转到单个表,并且记录与执行该作业的设备(device_id)相关联。您可以在此处添加其他列来编写特定于记录的数据,如start_time,end_time等等...

您不需要为每个设备的记录列表设置单独的表。当您需要显示单个设备的记录时,只需使用device_id = X生成records,您就会收到设备的记录。

更新:

  一万个设备,每个人每天制作十个操作记录   天

它在10天内创造了大约100万条记录。这是一个chalange。但我不认为将这些数据拆分到不同的表格会给你带来更好的表现。

您应该尽可能在{{1}}表中设置最小列。在那里放置最低要求的信息。尽量不要使用字符串,如果可能,只使用整数。如果使用字段来写日期/时间,请使用TIMESTAMP,因为它最接近整数。在将用于搜索数据的所有列上创建索引 - device_id,time(如果有这样的列),依此类推。这会增加磁盘使用量,但我认为会提高性能。

考虑是否可以在给定时间段后将数据​​备份到外部文件 - 例如,在一个月之后,您将释放300万条记录。

答案 1 :(得分:0)

我建议使用这样的布局:

User
+----+----------+----------+-------+
| id | username | password | email |
+----+----------+----------+-------+
|  1 | jon      | xxxx     | xxxx  |
|  2 | melissa  | xxxx     | xxxx  |
+----+----------+----------+-------+

Device
+----+---------+--------+
| id | user_id |  name  |
+----+---------+--------+
|  1 |       1 | iPad   |
|  2 |       1 | iPhone |
|  3 |       1 | Laptop |
|  4 |       2 | Laptop |
+----+---------+--------+

Operation
+----+-----------+-----+-------+
| id | device_id | key | value |
+----+-----------+-----+-------+
|  1 |         1 | x   | y     |
|  2 |         1 | y   | z     |
|  3 |         2 | x   | x     |
|  4 |         2 | z   | y     |
|  5 |         3 | x   | y     |
+----+-----------+-----+-------+

我希望我的问题是对的。