Considera un semplice database relazionale con due tabelle:
item_index: item_id|item_name
item_property: item_id|property_name
Ogni elemento ha diverse proprietà e desidero ripetere la raccolta di elementi nel mio database. Per questo ho bisogno di scrivere una funzione con la seguente firma, dove database denota il tipo di handle del database:
contents : database -> (item_name * (property_name list)) stream
Questa firma significa che la funzione contents
restituisce un flusso di coppie il cui primo membro è il nome dell'elemento e il secondo membro il suo elenco di proprietà.
Ci sono due semplici opzioni per implementare i contenuti:
-
Allo stesso tempo richiedono il flusso di elementi e il flusso di proprietà dal database, ordinati in modo appropriato e aggregano i dati esaminando i due flussi.
-
Richiedi lo stream di righe di un join interno, in modo che ogni elemento con le sue proprietà sia rappresentato da più righe, come
item_id|item_name|property_name
e aggrega gli elementi da questi dati.
Il secondo sembra sovraccaricare il database, a causa del join - probabilmente impacchettato come una vista - mentre il primo è significativamente più difficile da programmare a causa dell'accesso simultaneo al database.
Ho ragione nel pensare che l'implementazione delle funzioni contents
che utilizzano richieste simultanee equivale a implementare malamente un'operazione join
nell'applicazione? Ciò implicherebbe che il secondo progetto è superiore al primo in quanto porta a una complessità temporale simile e a un codice più semplice.