存储多个时间戳的最佳方式&号码?

时间:2016-09-10 13:26:10

标签: mysql sql pdo

我无法描述我想要的内容,所以我会尽力用数组来说明它。

Array
(
    [user1] => Array(
        [title] => customtitle1
        [prefix] => false
        [worlds] => Array(
            [119] => 367
            [2] => 5
        )
        [time] => Array (
            100
            101
            102
            204
        )
        [last] => 119
    )
    [user2] => Array(
        [title] => customtitle2
        [prefix] => true
        [worlds] => Array(
            [119] => 367
            [2] => 5
        )
        [time] => Array (
            100
            101
            102
            204
        )
        [last] => 119
    )
)

我将其存储在txt文件中,但我转移到了SQL数据库。我该如何储存?

我这里只展示了2个用户,但更多的是" worlds"数组超时获取新值(包括新键,因此长度将改变)。同样适用于"时间"数组,但只有值。

username | title | prefix | 
user1    | bla   | true   |
user2    | bl2   | false  |

我不知道如何继续实施这些世界&时间数组。我也希望能够对这些进行排序。

1 个答案:

答案 0 :(得分:0)

保持实体分离是良好data modeling的一个目标。使用一个表来存储一种类型的信息,使用另一个表来存储另一种类型,并使用foreign keysjoin tables来关联它们。根据您的示例,您可能需要这样的结构。

users:
| id | username | title | prefix | last_world |
| 1  | user1    | bla   | true   | 119        |
| 2  | user2    | bl2   | false  | 119        |

worlds:
| user_id | worlds_id | other_id |
| 1       | 119       | 367      |
| 1       | 2         | 5        |
| 2       | 119       | 367      |
| 2       | 2         | 5        |

time:
| user_id | time |
| 1       | 100  |
| 1       | 101  |
| 1       | 102  |
| 1       | 204  |
| 2       | 100  |
| 2       | 101  |
| 2       | 102  |
| 2       | 204  |

这些表可以使用如下查询加入:

SELECT 
  u.*, 
  w.worlds_id,
  w.other_id,
  t.time
FROM users u 
INNER JOIN worlds w
ON u.id = w.user_id
INNER JOIN time t
ON u.id = t.user_id

构建数据库模式,以便数据永远不会冗余(例如,您只更新一个用户名),并且数据在一个地方永远不会错误,但在另一个地方正确的数据称为database normalization

祝你好运!