web-dev-qa-db-ja.com

定期的なデータセットの保存

次の配列をデータベースに保存しようとしていますが、経験が浅いため、設定方法がわかりません。

スケジューラー用です。日エントリには、次の3つの配列が含まれます。

  • 最初の配列は、基本エントリ_['prefix', begin, increment, 'suffix']_を保持し、次のように表示します。

    'prefix' begin - (begin + increment) 'suffix'

  • 2番目の配列は、すべてのnumberを表示する定期的なエントリを保持します。たとえば、5つの基本エントリごとに、新しいタイプを表示します。

  • 3番目の配列は、表示する日を保持します。

最大7日間のエントリを含むことができる週のエントリもあります。

私はそれを次のように整理しました:

日入力

_'day' => [
    ['prefix', begin, increment, 'suffix'],
    [
        [every, ['prefix', begin, increment, 'suffix']],
        [every, ['prefix', begin, increment, 'suffix']],
        [every, ['prefix', begin, increment, 'suffix']],
        (Haven't decided on limit)
    ],
    [list of days]
]
_

そのすべてのデータをそのまま1つの列に貼り付けることを考えましたが、週のエントリも保存する必要があることを思い出しました。

_'week' => [
  'day' => [
      ['prefix', begin, increment, 'suffix'],
      [
          [every, ['prefix', begin, increment, 'suffix']],
          [every, ['prefix', begin, increment, 'suffix']],
          [every, ['prefix', begin, increment, 'suffix']],
          etc...
      ],
      [list of days]
  ],
  'day' => [
      ['prefix', begin, increment, 'suffix'],
      [
          [every, ['prefix', begin, increment, 'suffix']],
          [every, ['prefix', begin, increment, 'suffix']],
          [every, ['prefix', begin, increment, 'suffix']],
          etc...
      ],
      [list of days]
  ],
  (Possibly 5 more 'days')
]
_

エントリごとにid列と他のいくつかの無関係な列がありますが、これが主要なデータです。私はまだ多くのコードを書いていませんので、何でも変更したいと思っています。

私の質問は、このデータをmySQLデータベースに保存するための最も保守可能で効率的な方法などは何ですか?

編集:データは次のようになります:

_'day' => [
    ['Lesson', 1, 2, ''],
    [
        [5, ['Test', 1, 0, '(study)']],
        [10, ['Investigation', 10, 0, '(study)']]
    ],
    [1, 2, 3, 4, 5]
]
_

また、1週間のエントリには、これらの日のエントリを最大7つ含めることができます。

1
Chris Happy

データベーステーブルには、行と列の2つのディメンションしかありません。データベースエンジンが調べる必要のないblobに階層的なものを格納したい場合を除いて、JSONのようなものはRDBMSに適していません。 jpegをテーブルに保存する場合、できることはjpegを取得することだけです。すべてのjpegの中から黄色いピエロを探すようにデータベースに依頼することはできません。

(実際には、JSONとXMLの内部を覗く方法がありますが、それはRDBMSを使用する「実際の」方法ではありません。)

同様の行と異なる列の1つ以上のセットとしてデータを再定式化します。その後、さらに話すことができます。

1
Rick James

スケジューラーを作成する最良の方法は、確立された cron形式のようなものを使用することです。 これが機能する場合は、タスクが単純になります。

CREATE TABLE tasks ( pkid int AUTO_INCREMENT, ... );

CREATE TABLE crontab (
  minutes   text,
  hours     text,
  dom       text,
  month     text,
  dow       text,
  year      text,
  fkey_task int REFERENCES tasks.pkid
);

この表記は通常、すべての1分未満のスケジューラーで十分に機能します。これで、スケジューラのイベントループを管理するためのライブラリが必要になります。

0
Evan Carroll