これは完全に架空の質問です。特定の期間 (1 か月、3 か月、6 か月、1 年など) 存続できるユーザーのメンバーシップを保存する必要があるデータベースがあるとします。
フィールドを持つテーブルMemberships
を持つ方が良いですか (各日付は UNIX タイムスタンプとして保存されます):
user_id INT
、start_date INT
、end_date INT
または次のように保存します。
user_id INT
、start_date INT
、length INT
どちらの方法でも、有効なメンバーシップを持つユーザーを照会できます (たとえば)。後者の状況では、クエリが実行されるたびに算術演算を実行する必要がありますが、前者の状況では、(挿入時に) 終了日を 1 回だけ計算する必要があります。そういう意味では前者の方がいいような気もしますが、何かデメリットはありますか?代わりに長さを保存することで回避でき、日付を保存することでは回避できない一般的な問題はありますか?
また、時刻/日付データを格納するときに UNIX タイムスタンプを使用する方法はありますか、それとも DATETIME のようなものが好まれますか? 両方のデータ型 (過度の変換) で問題が発生しましたが、通常は UNIX タイムスタンプに落ち着きます。DATETIME のようなものが好まれる場合、これにより以前の設計上の質問に対する答えがどのように変わりますか?