sql >> データベース >  >> RDS >> PostgreSQL

RailsとPostgresqlでの毎週の時間割り当ての問題

    私はおそらくdaterange を選びます 桁。

    これにより、さまざまなサイズのチャンクを柔軟に設定でき、除外制約 範囲の重複を防ぐため。

    「contains」演算子@>を使用すると、特定の週の行を見つけるのは非常に簡単です。 、例: where the_column @> to_date('2019-24', 'iyyy-iw') 2019年の週番号24を含む行を検索します。

    to_date('2019-24', 'iyyy-iw') 指定された週の最初の日(月曜日)を返します。

    2週間の間にあるすべての行を検索することもできますが、対応する日付範囲の作成は少し見苦しいように見えます。最初と最後の日で包括的範囲を作成できます:daterange(to_date('2019-24', 'iyyy-iw'), to_date('2019-24', 'iyyy-iw') + 6, '[]')

    または、次の週の初日に排他的な上限範囲を持つ範囲を作成できます:daterange(to_date('2019-24', 'iyyy-iw'), to_date('2019-25', 'iyyy-iw'), '[)')

    範囲は非常に効率的にインデックス付けできますが、必要なGISTインデックスは、2つの整数列のBツリーインデックスよりも維持するのに少し費用がかかります。

    範囲を使用することのもう1つの欠点(柔軟性が本当に必要ない場合)は、2つの整数列(8ではなく14バイト、または2つのsmallintで4バイト)よりも多くのスペースを占めることです。したがって、テーブルのサイズが問題になる場合は、年/週の列を使用した現在のソリューションの方が効率的です。

    入力が(「週番号」ではなく)最初の開始日と終了日である場合、私は間違いなくdaterangeを選択します。 桁。その開始日と終了日が1週間を超える場合は、複数の行ではなく1つの行のみを保存します。




    1. PostgreSQL用のトップPGクラスタリング高可用性ソリューション

    2. SQL ServerでSAアカウントを無効にする(T-SQLの例)

    3. Tomcat、Java、および SQL Server 2008 R2:接続 URL 'null' のクラス '' の JDBC ドライバーを作成できません

    4. SQLServerでテーブルのすべての依存関係を見つける方法