Un algoritmo per trovare i criteri di corrispondenza dei sottoinsiemi?

3

Recentemente ho trovato un problema che mi piacerebbe condividere alcune riflessioni con qualcuno su questo forum. Questo si riferisce alla ricerca di un sottoinsieme. In realtà è più complicato, ma ho cercato di presentarlo qui usando alcuni concetti più semplici.

Per semplificare le cose, ho creato questo modello concettuale di DB:

Supponiamo che questo sia un DB per la memorizzazione delle ricette. La ricetta può avere molti passaggi di istruzioni e molti ingredienti.

Gli ingredienti sono conservati in una credenza e sappiamo quanta parte di ciascun ingrediente abbiamo.

Ora, quando creiamo una ricetta, dobbiamo definire la quantità di ogni ingrediente di cui abbiamo bisogno. Quando vogliamo utilizzare una ricetta, controlliamo solo se l'importo richiesto è inferiore all'importo disponibile per ciascun prodotto e poi decidiamo se possiamo cucinare una cena - se la quantità richiesta per almeno un ingrediente è inferiore all'importo disponibile - la ricetta non può essere cucinato. Semplice query SQL per ottenere il risultato.

Questo è semplice, ma mi chiedo, come dovrei lavorare quando il problema viene indicato al contrario, cioè come trovare le ricette che possono essere cucinate solo con gli ingredienti che sono disponibili?

Spero che la mia spiegazione sia chiara, ma se hai bisogno di ulteriori chiarimenti, ti preghiamo di chiedere.

    
posta Macin 24.07.2014 - 14:07
fonte

2 risposte

2

Dopo i tuoi chiarimenti sulla domanda, vorrei seguire questa logica per elencare le ricette che escludono qualsiasi ricetta con un ingrediente mancante / insufficiente.

SELECT recipeid
FROM recipeingredients RI
WHERE recipeid NOT IN (SELECT RI1.recipeid
                       FROM recipeingredients RI1
                       LEFT OUTER JOIN Ingredients I ON RI1.ingredientsid = I.id
                                                    AND RI1.Requiredquantity <= I.availablequantity
                       WHERE I.id IS NULL
                      )
    
risposta data 26.07.2014 - 02:11
fonte
0

Ragionevolmente semplice, usando un join sottoquery.

  1. JOIN Recipeingredients su Ingredients where RequiredQuantity in quantità minore o uguale AvailableQuantity. Provalo per assicurarti che funzioni come previsto.
  2. UNISCI Ricetta IN sopra sottoquery per trovare quelli che puoi fare.

Ti lascerò scrivere l'attuale SQL.

    
risposta data 25.07.2014 - 01:08
fonte

Leggi altre domande sui tag