2016-09-10 52 views
1

私は何が欲しいのか記述するのが難しいので、私はそれを配列でできるかどうかを説明しようとします。複数のタイムスタンプと番号を保存する最も良い方法は?

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人のユーザーしか表示されませんが、それ以上の場合、「ワールド」配列には新しい値が追加されます(新しいキーを含むため、長さが変わります)。 "time"配列でも同じですが、値だけです。

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

私は私が世界に&時間アレイの実装に行くだろうかわかりません。私もこれらを並べ替えることができるようにしたいと思います。

+1

データベースの正規化に関する情報が必要です。 – CodeCaster

+0

はい。そして、それはこの質問を広すぎます。 – GolezTrol

答えて

0

エンティティを別々に保つことは、良いdata modelingの1つの目標です。 1つのテーブルを使用して1つのタイプの情報を格納し、別のテーブルを別のタイプを格納し、foreign keysまたはjoin 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と呼ばれています。

幸運を祈る!

関連する問題