我对数据库设计感到困惑。
这是我的要求:有不同的用户;用户可以拥有一个或多个设备。一些用户将拥有数千台设备甚至一万台设备。设备有许多操作记录。有一天会增加10-20个操作记录。
我准备为用户记录userId,passWord创建一个表。不同的用户创建不同的设备列表记录deviceNum,devicState。设备具有操作表记录操作记录。
所以,我的数据库会有很多表。我想我有十万个设备。我应该创建十万个设备表吗?
答案 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 |
+----+-----------+-----+-------+
我希望我的问题是对的。