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

Zarządzanie zapasami z opcjami na akcje

Myślę, że projekt modelu (po 6NF i 3NF).
Uprościłem konwencję nazewnictwa, usuwając słowo kluczowe „sklep”.
(Również encja sklep może prowadzić osobną koncepcję AKA SaaS)

SqlFiddle Demo

O pytaniach w komentarzach:

Tak, powszechnym wzorcem jest użycie identyfikatora zastępczego na twoich stołach. Jak możesz zobaczyć w artykule, będzie to miało swoje zalety i wady.

Na przykład w pytaniu zobaczysz klucz podstawowy ProductSpecification tabela jest kompozycją ProductTypeOptions , OptionValue i Product klucze obce.
Tymczasem klucz podstawowy innych tabel, takich jak OptionValue jest kluczem złożonym (OptionId + ValueName )
Wygląda na to, że łatwiej będzie mieć ID pole w każdej tabeli jako klucz podstawowy, tak, ale jako projektant baz danych stracisz coś cennego, logikę biznesową .

W obecnym projekcie możesz mieć te ograniczenia w tabeli Product-Specification, pokażą one część logiki biznesowej:

  • Sprawdź ograniczenie w ProductSpecification {OptionValue.optionId = productTypeOption.optionId} co zapobiegnie przypisaniu wartości takiej jak „Biały” do „Rozmiaru”.
  • Sprawdź ograniczenie w ProductSpecification {product.productTypeId = productTypeOption.productTypeId} co uniemożliwi przypisanie produktu takiego jak „Nike” do specyfikacji produktu „Samochody”.

Jeśli używasz identyfikatora zastępczego, nie możesz mieć tego typu ograniczeń w swojej bazie danych (spróbuj tego).
Dodatkowa praca będzie potrzebna do wykonania w ramach implementacji aplikacji, aby je uzyskać.
BTW użyj identyfikatora zastępczego, sprawdź spójność danych , jeśli jesteś bardziej zainteresowany, zobacz wybór klucza podstawowego:naturalnego lub zastępczego .

Wygląda na to, że „Buty męskie” marki „Nike” muszą mieć cenę, zapasy i dopłaty, więc są one naturalną własnością Product tabela.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zresetować hasło administratora WordPress za pomocą wiersza polecenia MySQL?

  2. Dane wyjściowe między dwiema datami mysql

  3. Jak uzyskać prawdziwy rozmiar bazy danych MySQL?

  4. WYBIERZ tylko wiersze zawierające tylko znaki alfanumeryczne w MySQL

  5. Czy w MySQL powinienem używać danych typu datetime czy timestamp?