繁体   English   中英

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

[英]How should I design my database for different user has different devices?

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

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

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

因此,我的数据库将有许多表。 我想我有十万多个设备。 我应该创建十万个设备表吗?

从您所说的仅需要3个表:

Users - user_id, username, pass, data, etc...
Devices - device_id, user_id (owner), device_data....
OpRecords - record_id, device_id, record_data_stuff...

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

所有设备都注册到“ Devices表中,每个设备都与拥有该设备的用户(user_id)相关联。 您可以根据需要创建任意列-例如设备类型,设备名称,参数,工作时间等。

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

您无需为每个设备的记录列表使用单独的表。 当需要显示单个设备的记录时,只需使用device_id = X进行SELECT ,您将只收到设备的记录。

更新:

一万台设备,每个人一天会做十个操作记录。十天

它在10天内记录了约100万条记录。 这是一个调味料。 但我认为将这些数据拆分到不同的表中不会带来更好的性能。

您应该在records表中设置为最少的列。 在此处放置最少的必需信息。 尽量不要使用字符串,并尽可能使用整数。 如果使用字段来写日期/时间,请使用TIMESTAMP,因为它最接近整数。 在将用于搜索数据的所有列上创建索引-device_id,时间(如果有这样的列)等等。 这将增加磁盘使用率,但我认为会提高性能。

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

我建议使用这样的布局:

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     |
+----+-----------+-----+-------+

希望我能正确回答您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM