Esta es una pregunta completamente hipotética: digamos que tengo una base de datos donde necesito almacenar membresías para un usuario, que puede durar un tiempo específico (1 mes, 3 meses, 6 meses, 1 año, etc.).En una base de datos, ¿es mejor almacenar un período de tiempo como una fecha de inicio/finalización, o una fecha de inicio y un período de tiempo?
¿Es mejor tener una mesa Memberships
que tiene campos (cada fecha se almacena como una marca de tiempo Unix):
user_id INT
, start_date INT
, end_date INT
o para almacenarla como:
user_id INT
, start_date INT
, length INT
De cualquier forma, puede buscar usuarios con miembros activos cadera (por ejemplo). Para la última situación, la aritmética debería realizarse cada vez que se ejecuta la consulta, mientras que la situación anterior solo requiere que la fecha de finalización se calcule una vez (en la inserción). Desde este punto de vista, parece que el diseño anterior es mejor, pero ¿hay algún inconveniente? ¿Hay algún problema común que se pueda evitar almacenando la longitud, que no se puede evitar almacenando la fecha?
Además, ¿son las marcas de tiempo unix el camino a seguir cuando se almacenan datos de fecha y hora, o se prefiere algo como DATETIME? Me he encontrado con problemas con ambos tipos de datos (conversiones excesivas) pero generalmente me fijo en los sellos de tiempo de Unix. Si se prefiere algo como DATETIME, ¿cómo cambia esto la respuesta a mi pregunta de diseño anterior?
¿No sería la respuesta a esta pregunta depende del sistema? Ambas soluciones me parecen buenas, pero si ninguna de sus consultas se preocupa por la duración, entonces el primer caso es mejor. De lo contrario, podría ser de otra manera. Además, si tiene consultas pesadas que utilizan la longitud y las consultas pesadas que usan la fecha de finalización, es posible que desee almacenar ambos valores en su base de datos. –