【问题标题】:How should I design my database for different user has different devices?我应该如何为具有不同设备的不同用户设计我的数据库?
【发布时间】:2017-05-25 15:59:49
【问题描述】:

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

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

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

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

【问题讨论】:

  • 一个设备可以供多个用户使用还是只能供一个用户使用?操作是设备独有的吗?还是可以在具有不同值的多个设备上发生相同的操作?
  • P.lease 分享您上面提到的 3 个表的粗略/暂定表结构。它会比文字更容易理解。届时我将能够分享详细的见解。
  • 顺便说一句,我建议你只存储一些 passWordHash,而不是普通的 passWord

标签: mysql database-design


【解决方案1】:

你说过你只需要 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 等...

您不需要为每个设备的记录列表提供单独的表格。当您需要显示单个设备的记录时,只需将SELECTdevice_id = X 一起制作,您将只收到您设备的记录。

更新:

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

它在 10 天内记录了大约 100 万条记录。这是一个挑战。但我不认为将这些数据分成不同的表会给你带来更好的性能。

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

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

【讨论】:

  • 所有设备都是操作记录保存一张表,会不会导致操作表太大?一万台设备,每个人一天做十个操作记录。十天我就有一百个操作记录。那会不会很难选择?
  • 其实今年不会有一万台设备,但应该会有。我想我需要使用hash key来做sql分区。
【解决方案2】:

我建议使用这样的布局:

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

希望我的问题没问题。

【讨论】:

  • 关于操作表,一万台设备,每台设备一天会做十条操作记录。也就是说操作表每天会增加十万条操作记录。是不是很多?
猜你喜欢
  • 2018-10-11
  • 2012-03-16
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多