Hay varias formas diferentes de abordar las fechas difusas. En PostgreSQL, puede usar
- un par de columnas de fecha (earliest_possible_date, last_possible_date),
- una columna de fecha y una columna de precisión ("2012-01-01", "año"), o
- un tipo de datos de rango (rango de fechas), o
- un varchar ('2013-01-2?', '2013-??-05'), o
- otra tabla o tablas con cualquiera de esos tipos de datos.
El tipo de datos de rango es peculiar de las versiones recientes de PostgreSQL. Puede usar los otros en cualquier dbms SQL.
El tipo de borrosidad que necesita depende de la aplicación. La forma en que consulta las fechas aproximadas depende del tipo de datos o la estructura que elija. Necesita una comprensión firme de qué tipo de borrosidad necesita almacenar y del tipo de preguntas que sus usuarios necesitan respuesta. Y necesita probar para asegurarse de que su base de datos pueda responder a sus preguntas.
Por ejemplo, en los sistemas legales, las fechas pueden recordarse mal o borrarse. Alguien podría decir "Fue un jueves de enero de 2014. Lo sé era un jueves, porque era el día de recolección de basura", o "Fue la primera semana de junio o julio del año pasado". Para registrar ese tipo de confusión, necesita otra tabla.
O un matasellos podría estropearse para que solo pueda leer "14, 2014". Sabe que tiene matasellos del 14, pero no sabe de qué mes. De nuevo, necesitas otra mesa.
Algunos (¿todos?) de estos no le darán una lógica de tres valores a menos que salte a través de algunos aros. ("Posible" no es un valor booleano válido).