sql >> Databasteknik >  >> RDS >> Mysql

Designa en receptdatabas som måste innehålla ingredienser såväl som underrecept

Det verkar som att du behöver en databasmodell som liknar denna:

Denna modell har följande egenskaper:

  • I huvudsak är varje recept en serie steg.
  • Varje steg har sin ordning i förhållande till andra steg i samma recept (STEP_NO), en enhet (massa, volym, antal...), en kvantitet i den enheten etc.
  • Ett särskilt steg är kopplat antingen till en ingrediens (när INGREDIENT_ID är icke-NULL) eller till ett annat recept (när SUBRECIPE_ID är icke-NULL).
  • För övrigt är STEG en ganska standardövergångstabell som implementerar många-till-många-relationer, vilket innebär att samma ingrediens kan användas i flera recept (eller till och med flera steg i samma recept) och även ett recept kan användas ett "underrecept" av flera andra recept.
  • Detta är i huvudsak en riktad graf. Datamodellen i sig kommer inte att förhindra cykler - de bör undvikas på klientkodnivå och eventuellt upptäckas av utlösare.

Om MySQL stödde CHECK-begränsningar (vilket det inte gör ), kan du se till att en (men inte båda) av dem är icke-NULL så här:

CHECK (
    (INGREDIENT_ID IS NULL AND SUBRECIPE_ID IS NOT NULL)
    OR (INGREDIENT_ID IS NOT NULL AND SUBRECIPE_ID IS NULL)
)

Som det ser ut behöver du en trigger för det.



  1. Autentiseringsplugin 'caching_sha2_password' stöds inte

  2. MYSQL If-sats i transaktionen orsakar fel

  3. Kan inte installera mysql2 gem

  4. Spara utdata från sql-funktionen till csv-fil (COPY) med dynamiskt filnamn