[英]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.