Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Projektowanie bazy danych przepisów, która musi zawierać zarówno składniki, jak i podprzepisy

Wygląda na to, że potrzebujesz modelu bazy danych podobnego do tego:

Ten model ma następujące właściwości:

  • Zasadniczo każdy przepis to seria kroków.
  • Każdy krok ma swoją kolejność względem innych kroków tej samej receptury (STEP_NO), jednostkę (masa, objętość, liczba...), ilość w tej jednostce itp.
  • Określony krok jest połączony albo ze składnikiem (gdy INGREDIENT_ID nie ma wartości NULL) albo z innym przepisem (gdy SUBRECIPE_ID ma wartość inną niż NULL).
  • Poza tym, STEP jest dość standardową tabelą połączeń implementującą relację wiele-do-wielu, co oznacza, że ​​ten sam składnik może być użyty w wielu recepturach (lub nawet w wielu krokach tej samej receptury), a receptura może być „podprzepis” wielu innych przepisów.
  • Jest to zasadniczo wykres skierowany. Sam model danych nie zapobiegnie cyklom - należy ich unikać na poziomie kodu klienta i być może wykrywane przez wyzwalacze.

Jeśli MySQL obsługuje ograniczenia CHECK (czego nie obsługuje ), możesz upewnić się, że jeden (ale nie oba) z nich nie ma wartości NULL:

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

W obecnej sytuacji potrzebujesz do tego wyzwalacza.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień nazwę Laravela created_at i updated_at

  2. Skopiuj wartości z jednej kolumny do drugiej w tej samej tabeli

  3. Wartość zewnętrznej kolumny wyboru w połączonym podzapytaniu?

  4. Zapytanie o liczbę tabel, które mam w MySQL

  5. Koncepcje MySQL:sesja a połączenie