L'età può essere un attributo composito in DBMS?

7

la mia domanda sarebbe: l'età può essere considerata un attributo composito? Perché il nome è un attributo composto e può essere diviso in nome, secondo nome e cognome. E quindi l'età può essere un attributo composito poiché puoi dividerlo in anni, mesi e giorni?

    
posta Chandima Gayan 12.12.2016 - 12:01
fonte

4 risposte

31

Può età essere un attributo composto? No. l'età è una funzione della data di nascita e ora.

age = now - birthdate

Quindi, per quanto riguarda la data di nascita? Può essere un attributo composto?

Sì, può, ma ha senso solo memorizzare le date come composito in situazioni di data warehousing.

Spesso, quando si immagazzinano dati, si memorizzano anno, mese e giorno come elementi separati per semplificare la scrittura di query come

How many people were born in March?

O

Of all the people born in 1982, how many have blue eyes. How does that compare to April 1992?

Probabilmente avrai anche una tabella che mappa le date ai trimestri, quindi potresti chiedere cose come:

How do birth rates compare between Q1 and Q2 over the last decade?

Questi sono esempi forzati, ma si spera che illustrino il punto. Consiglierei di fare qualche ricerca sui database "schema a stella" e "metriche che cambiano lentamente".

    
risposta data 12.12.2016 - 12:45
fonte
6

Sì, puoi memorizzare Age come un composto di anno, mese, data, ora, minuto, secondo nel database, se lo desideri.

Tuttavia, probabilmente questa non è una buona idea nella maggior parte dei casi, perché Age può essere derivato da altri valori che sono solitamente preferibili aver memorizzati nel database. Il motivo principale è che è meglio memorizzare la data di nascita anziché l'età; perché la data di nascita è costante ma l'età dipende dal tempo corrente. Non appena salvi la tua età, (a meno che non sia una sorta di valore per "Età ad una certa ora", piuttosto che età dinamica), nel tempo sarà sempre più errata.

La memorizzazione di dati che possono essere derivati da altre parti di dati è anche una violazione di alcuni livelli di Normal Form e può portare a problemi come la ridondanza dei dati e l'inconsistenza.

    
risposta data 12.12.2016 - 22:27
fonte
2

In parole povere:

  • Di solito l'età non viene memorizzata poiché è un attributo volatile . Cambia dal secondo. Quindi archiviarlo è una cattiva idea universalmente riconosciuta.

  • Di solito la data di nascita è memorizzata.

  • Ciò che desideri è un requisito di rappresentazione che può essere facilmente calcolato al momento della presentazione o in una vista del database scrivendo una funzione piuttosto banale - nel caso non esiste già una funzione di formattazione incorporata nell'RDBMS o nel linguaggio di sviluppo che già lo fa.

In conclusione: sì, puoi farlo, ma sarebbe strongmente sconsigliabile .

    
risposta data 13.12.2016 - 10:40
fonte
0

memorizza la data di nascita e calcola l'età ogni volta

Come gli altri hanno detto che non c'è alcun significato nell'archiviazione diretta dell'età.

non è efficace decomporre o normalizzare troppo

Sebbene sia possibile rappresentare date come 3 colonne giorno, mese anno questo non è affatto efficiente.

C'è solo un vantaggio in termini di prestazioni nella divisione dei campi che possono essere indicizzati. E l'indicizzazione delle combinazioni di giorno, mese e anno è molto meno efficiente dell'indice invece del campo data.

Per i sistemi software amministrativi il collo di bottiglia delle prestazioni di solito non viene elaborato dal trasferimento dei dati.

    
risposta data 13.12.2016 - 17:56
fonte

Leggi altre domande sui tag