La mia domanda è relativa a quando una tabella di database deve essere suddivisa in più tabelle con relazioni? Tuttavia, ho una relazione uno a uno più chiara rispetto a quella in questione.
Se stavo progettando la seguente tabella da zero dovrebbe essere in una o due tabelle?
ORDERS
id
date
total_amount
is_paid
paid_date
paid_amount
has_discrepancy
discrepancy_reason
Un ordine non viene mai pagato al momento della creazione. Può o non può essere pagato in seguito. Mi è stato detto che dal momento che ha una corrispondenza uno-a-uno dovrebbe sempre essere in un unico tavolo. Se is_paid
è FALSE
, i campi rimanenti sono sempre NULL
. Tuttavia, il seguente disegno ha più senso per me:
ORDERS
id
date
total_amount
PAYMENTS
id
order_id
paid_date
paid_amount
has_discrepancy
discrepancy_reason
Un altro esempio:
EMPLOYEES
id
first_name
last_name
date_of_birth
is_married
spouse_first_name
spouse_last_name
spouse_date_of_birth
Per me sembra che sia lo stesso del primo esempio in cui se is_married
è FALSE
i campi rimanenti sono NULL
e penso che dovrebbe essere scomposto in questo modo:
EMPLOYEES
id
first_name
last_name
date_of_birth
SPOUSES
id
married_to_employee_id
spouse_first_name
spouse_last_name
spouse_date_of_birth
Il primo progetto in ciascun caso presuppone che una relazione uno-a-uno sia naturale. Tuttavia, i piani di pagamento con pagamenti multipli non sono inauditi, né i matrimoni poligami. Sto solo pensando troppo a questo? Dovrei semplicemente svolgere il compito a portata di mano o dovrei pensare se i dati appartengano veramente o meno alla stessa tabella?
Mi è stato detto che non si memorizzerebbe il nome di una persona in una tabella separata solo per i nomi e che lo stesso principio si applica qui, ma la differenza è che non si progetterebbe la tabella in questo modo:
EMPLOYEES
id
has_first_name
first_name
has_last_name
last_name
has_date_of_birth
date_of_birth
Se hai una colonna che ti dice solo se altre colonne sono popolate o meno, non è meglio memorizzare quei valori in una tabella separata? O è meglio semplificare il codice avendo a che fare solo con una tabella?