Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα

 

Κάνω ένα project με PostgreSQL 10 και έχω κάποιες στήλες με ημερομηνίες που θέλω να είναι και προΧριστού.

 

Απ ότι βλέπω εδώ στο Link.png Site: Documentation το minimum προΧριστού φτάνει μέχρι 4713 BC. Μπορώ να έχω μικρότερο minimum πχ να φτάνει μέχρι 7000BC ? Η πρέπει να εφαρμόσω δικιά μου λύση? Και εαν ναι, ποια προτείνετε ?

 

Ευχαριστώ

 

Δημοσ.

Σε κάποια φάση είχα ψάξει το συγκεκριμένο θέμα για μια πολύ ιδιαίτερη περίπτωση.

 

Το συμπέρασμα μου μετά από μεγάλη έρευνα ήταν:

 

1. Δεν υπάρχει περίπτωση να γνωρίζεις οποιαδήποτε ημερομηνία χιλιάδες χρόνια πριν με ακρίβεια μέρας. Οπότε γιατί προσπαθείς να την αποθηκεύσεις με ακρίβεια μέρας;

 

2. Το ημερολόγιο που χρησιμοποιούμε δεν πάει πίσω τόσο μακριά και δεν είναι γραμμικό και συνεχές. Ακόμα και στην υποθετική περίπτωση που ξέρεις σίγουρα ότι κάτι έγινε την 16/12/5000 π.Χ., αυτή η πληροφορία είναι άχρηστη σε κάποιον που δεν έχει μάστερ στις ημερολογιακές πρακτικές της ανθρωπότητας.

 

Δεν ξέρω ποιο είναι το πρόβλημα που θες να λύσεις, αλλά αμφιβάλλω ότι θα το λύσεις ουσιαστικά με τον τρόπο που λες.

Δημοσ.

Καλα, προφανως δεν μιλαμε για ακριβεια ημερας, αλλα και χρονια μονο να βαλεις, παλι date θες. 

 

Θα ειναι project με ιστορικα/πολιτισμικά στοιχεια, οπότε πρεπει να οριστουν και περιοδοι ή γεγονοτα που να εγιναν και πιο πριν, πχ το 4900 μπορει να έγινε μια μαχη. Φαντασου τωρα να εισαι ιστορικος, να πας να συμπληρωσεις μια φορμα, να βαλεις 4900πΧ και να σου πεταξει error! Ε δεν γινετε.  

Δημοσ.

Αν είσαι οκ με το να βάλεις μόνο έτος γιατί θες date? Ένα int σου κάνει.

 

Επίσης, η αρχή της καταγεγραμμένης ιστορίας συμπίπτει με την ανακάλυψη της γραφής, κάπου γύρω στο 3500 πΧ. Πριν από αυτό ούτε γι αστείο δε μπορείς να ξέρεις χρονολογίες έστω και με ακρίβεια έτους.

 

Ξαναλέω λοιπόν δες πιο προσεκτικά αν το πρόβλημα που προσπαθείς να λύσεις υπάρχει.

Δημοσ.

Λοιπον, πάρε popcorn. 
Αν εχεις date ή πιο συγκεκριμένα timestamp with time zone, μπορεις να κανεις extract το century αυτοματα. Οποτε ειναι ολα λιγο πιο αυτοματα και με types που ειναι φτιαγμενα να εκφραζουν ημερομηνιες.

Δηλαδη για να περαστει μια ιστορικη περιοδος, περναει ο admin τη min-max ημερομηνια, εσυ το σωζεις ως timestamptz range και μετα ο κωδικας αναλαμβανει να βρει τους αιωνες που ξεκινα και τελειωνει αυτη η περιοδος, αυτοματα. Ετσι ο admin δεν κουραζεται να εισαγει τα παντα.

Οταν ενας χρηστης παει να εισαγει πχ ενα κτιριο και στο πεδιο "χρονολογια κατασκευης" βαλει ειτε χρονιά ειτε αιωνα, εσυ εχεις ηδη τα range και αναλογα με το τι εχει εισαγει, μπορεις να τσεκαρεις τι ειναι μεσα στα range και να του συμπληρωσεις αυτοματα οτι ανηκει σε αυτη την περιοδο. Ετσι ο χρηστης δεν κουραζεται να εισαγει τα παντα.

Ολα τα παραπανω για μΧ. Για πΧ , αμα δεν εχεις αυτη τη δυνατοτητα φτιαχνεις εναν δευτερο πινακα "erasBC" ξερω γω και περνας μονο χρονιες και αιωνες σε μορφη int και int range. 

Η μπορεις να τα βαζεις ολα σε μΧ να εχεις κανονικα τα timestamp with time zone με τα timezone range σου και να εχεις ενα extra πεδιο boolean (true για μΧ, false για πΧ) και οταν υπολογιζεις πΧ αιωνες να αφαιρεις -1 πριν αποθηκευσεις. Overkill? Θα μου πεις, βολεψου με ints ξερω γω. 

Οσο για την ιστορια, μπορει ο αλλος να θελει να βαλει το 5000πΧ επειδη εγινε χρονολογηση με ανθρακα ξερω γω. Trust me δε μπορω να το περιορισω. 

Δημοσ.

Προσπαθώ να ρίξω μια ιδέα χωρίς να το κατέχω και πολύ το θέμα

 

κάνε ένα πρόσθετο πεδίο που θα κρατάει ώς ακέραιο ότι δεν χωράει στη βάση

Άν η ημερομηνία σου είναι μικρότερη από το 4.713(χωράει δηλαδή στη βάση)  βάλε την στο κανονικό πεδίο, αν είναι μεγαλύτερη βάλε στο πεδίο όλα τα στοιχεία και έτος 4713 και στο 2ο πεδίο (έτος - 4713)

 

Στη σύνθεση τώρα όταν το 2ο πεδίο είναι κενό επιστρέφεις το 1ο, όταν είναι συμπληρωμένο επιστρέφεις ότι έχει το 1ο με έτος 4713 + έτος 2ου πεδίου

 

Μπορεί επίσης το πρόσθετο πεδίο αντί ακέραιος να είναι και αυτό date time απλά θα έχει πάντα 1η ιαν ώρα 00 και κάποιο έτος

 

Άλλο που μπορείς να κάνεις είναι να προσπαθήσεις να επικοινωνήσεις με την κοινότητα και πιστεύω θα σου απαντήσουν

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...