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

重複しない日時イベントの設計

    日時範囲を操作する場合、最初に包括的で最後に排他的な範囲を使用するのが非常に一般的です。例:

    (using ISO8601 formatting)
    
    Start                  End
    2013-04-29T01:00:00Z - 2013-04-29T02:00:00Z
    2013-04-29T02:00:00Z - 2013-04-29T03:00:00Z
    

    値が開始以下で、終了より大きい(ただし等しくない)場合、値は範囲内にあります。上記の例では、02:00 最初の範囲ではなく、2番目の範囲に属します。言い換えれば:

    Start <= value < End 
    

    または同等に、

    Start <= value  AND  End > value
    

    数学では、区間表記 を使用します 、これは「ハーフオープン」間隔として知られています。

    [Start, End)
    

    これは、01:59:59のような値を使用するという考えよりも常に優れたアプローチです。 。 End - Startを引くかどうかを検討してください 期間を取得します。答えは59分59秒ではなく、1時間だと思います。

    ほとんどの例では、Start/Endという用語を使用しています 、ただし、Begin/Endが表示される場合があります またはStart/Stop 。個人的には、包括的/排他的範囲がある場合に使用するのに最適な用語のセットは、Start/Untilだと思います。 。両方の用語が5文字であり、アルファベット順に並んでおり、終了日が排他的であることを明示的に伝えるという追加の利点があります。

    また、個別のイベントについて話している場合は、タイムゾーンの混乱を防ぐために、時刻をUTCとして記録する必要があります。多くのタイムゾーンが夏時間の移行を通過するため、これはローカルアプリケーションにとっても重要です。データベースに記録する値があいまいにならないようにする必要があります。 MySQLでは、TIMESTAMPを使用できます 値がUTCとして保存されていることを確認するためのデータ型、またはDATETIMEを使用できます アプリケーションコードでUTC値を使用していることが確実な場合は、データ型。




    1. SELECTDISTINCTONクエリをPostgresqlからMySQLに変換する

    2. Salesforceドライバーは一括アクションをサポートしていますか?

    3. エラー:ローカルデータの読み込みが無効になっています-これはクライアント側とサーバー側の両方で有効にする必要があります

    4. SQLDeveloperが起動しない