Database
 sql >> Baza danych >  >> RDS >> Database

Projektowanie baz danych 101

Dobrym ćwiczeniem z modelowania danych dla początkujących jest utworzenie modelu danych sklepu internetowego . Za każdym razem, gdy daję to ćwiczenie moim uczniom, jestem zaskoczony, jak trudne jest dla nich.

Znajdź koncepcje...

Zobaczmy, jak można to zrobić. Wiemy, że musimy stworzyć tabelę dla każdej koncepcji w domenie. Pomyśl o rzeczownikachwyrażenia rzeczownikowe użyłbyś do opisania domeny. Z grubsza każdy rzeczownik jest albo pojęciem, atrybutem pojęcia, albo przykładem . Jakie są podstawowe koncepcje w sklepie internetowym? Od razu przychodzą na myśl dwa słowa:

  • klienci – osoby, które kupują rzeczy w naszym sklepie, oraz
  • produkty – przedmioty, które ludzie kupują w naszym sklepie.

Każdy klient ma podstawowy zestaw danych, które go opisują:id (zwykle potrzebujesz atrybutu id w swojej tabeli), imię i nazwisko, adres e-mail i hasło. Podobnie produkt ma identyfikator i nazwę. Moglibyśmy dodać więcej atrybutów dla klientów i produktów, ale na potrzeby tego przykładu to wystarczy. Do naszego modelu dodajemy dwie tabele.

... a także pojęcia abstrakcyjne

To jest sklep, więc oczywiście chcemy wiedzieć co został zamówiony i przez kogo . „Zamówienie” to słowo kluczowe w większości baz danych, więc nie powinniśmy używać go jako nazwy tabeli. Zamiast tego użyjemy nazwy purchase dla trzeciego stołu w naszym modelu. Tabela musi być w jakiś sposób połączona z customer i do product . Na początek narysujmy odniesienie między purchase i customer i między purchase i product .

customer-purchase odniesienie jest OK. Każdy zakup dokonywany jest przez jednego klienta; każdy klient może dokonać kilku zakupów. To odniesienie zostanie tutaj na stałe.

Jednak coś jest nie tak z purchase-product odniesienie. Kilka produktów można kupić w jednym zakupie; kilka zakupów może obejmować ten sam produkt. Ale nasze referencje pozwalają na zakup tylko jednego produktu podczas jednego zakupu. Usuńmy odniesienie i zastanówmy się nad innym sposobem jego modelowania.

Jedno duże pole tekstowe dla wszystkich zakupionych produktów?

A może dodamy duże pole tekstowe, w którym można przechowywać nazwy lub identyfikatory zakupionych produktów? Teraz możemy kupić kilka produktów w jednym zakupie. Jednak są tutaj pewne problemy:

  • Po pierwsze, trudno jest sprawdzić, czy produkt w purchased_items pole jest naprawdę w bazie danych.
  • Po drugie, jeśli chcesz zmienić nazwę produktu (ponieważ ją błędnie napisałeś), musisz zaktualizować wszystkie purchased_items instancje pól w purchase stół.
  • Wreszcie trudno jest analizować dane w bazie danych. Na przykład, jeśli chcesz dowiedzieć się, który produkt jest kupowany najczęściej, musisz użyć operacji na podciągu tekstu. A to nigdy nie jest zbyt wydajne.

Kilka kolumn produktów w tabeli zakupów?

Jakie są inne opcje? Chcemy, aby zakup był powiązany z kilkoma produktami, więc może powinniśmy dodać kilka purchase_item kolumny w tabeli zakupów? Cóż, to jest męczące (dodałem tylko 5 kolumn i zmęczyłem się) i tworzy sztuczne i głupie ograniczenie liczby kupowanych produktów.

Użyj tabeli pośredniej!

Głupie rozwiązanie podpowiada właściwe rozwiązanie. Chcemy mieć nieograniczoną ilość produktów związanych z zakupem. Jedynym sposobem jest posiadanie pośredniej tabeli łączącej . Nazwijmy to purchase_item . purchase_item tabela jest połączona z purchase i product . Teraz zakup może obejmować tyle produktów, ile chcemy. Jako bonus możemy dodać dodatkowe dane w tabeli:liczba zakupów, łączna cena za ten przedmiot i tak dalej.


Wnioski:

  • Tabele w modelu mogą reprezentować nie tylko obiekty fizyczne jak klient lub produkt. Tabele mogą przedstawiać więcej abstrakcyjnych pojęć jak zakup. Innymi przykładami mogą być rezerwacja w systemie rezerwacji hotelowych, book_loan w modelu dla biblioteki, wizyta w systemie dla lekarzy itp.
  • Gdy modelujesz transakcję (tj. kupowanie lub sprzedawanie wielu rzeczy), zwykle potrzebujesz trzech tabel :jeden dla transakcji (zakupu lub rezerwacji w systemie rezerwacji hotelowej), jeden dla rzeczy kupionych/sprzedawanych w ramach transakcji (produkt, pokój hotelowy) i jeden dla pozycji transakcyjnych (purchase_item, booking_item). W razie potrzeby możesz dodać dodatkowe informacje w tabeli pośredniej.

Stwórz własny model bazy danych sklepu za pomocą Vertabelo!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podkład do wąchania parametrów

  2. SQL WYBIERZ ŚREDN

  3. Powtarzalny poziom izolacji odczytu

  4. Prawe połączenie SQL

  5. Rola administratora baz danych w NoSQL