To w zasadzie pytanie o to, czym są słabe byty? Kiedy powinniśmy ich używać? Jak powinny być modelowane?
Jaka jest główna różnica między normalnymi a słabymi istotami? Czy słabe byty odpowiadają obiektom wartości podczas projektowania opartego na domenach?
Aby pomóc zachować pytanie na ten temat, oto przykład wzięty z Wikipedii, z którego ludzie mogą skorzystać, aby odpowiedzieć na następujące pytanie:
W tym przykładzie OrderItem
został zamodelowany jako słaby byt, ale nie rozumiem, dlaczego nie można go wymodelować jako zwykły byt.
Innym pytaniem jest, co jeśli chcę śledzić historię zamówień (tj. Zmiany jej statusu), czy byłby to normalny lub słaby podmiot?
OrderItem
jest zależne od tego,Order
że nieorderItems
może istnieć bez przynależności doorder
, ale nie rozumiem, dlaczego nie mogę użyćItemLineNumber
wyłącznie do identyfikacji przedmiotu ?! Właściwie może po prostu stworzęItemLineNumber
automatycznie wygenerowane,int
aby zapewnić unikalność i użyć klucza obcego,orderID
aby połączyć dwa podmioty ze sobą ?!Nie
OrderItem
może istnieć bez zamówienia lub produktu. Dlatego jest słaby, ponieważ kontrolują go zależności.Jeśli na przykład usuniesz zamówienie, nie będziesz mógł wiedzieć, dokąd należy wysłać przedmiot. Lub jeśli usuniesz produkt, nie wiesz, co wysłać.
źródło
Zgodnie z moim rozumieniem na powyższym diagramie, zamiast jednego, tj. Zamówienia i pozycji zamówienia, uwzględniły dwa byty / tabele, dzięki czemu dostęp do informacji staje się łatwy, gdy zaprojektowano dwa byty. A przedmiot zamówienia jest zależny od podmiotu zamówień, więc jest uważany za podmiot słaby. ponieważ cechą słabej istoty jest to, że zależy od innej istoty. Załóżmy, że jeśli nie podasz elementu zamówienia, skąd będziesz mógł poznać cenę przedmiotu zamówienia, rabat. i jak powiedział jgauffin. Jeśli na przykład usuniesz zamówienie, nie możesz wiedzieć, gdzie należy wysłać przedmiot. Lub jeśli usuniesz produkt, nie wiesz, co wysłać.
Schemat ER należy zaprojektować zgodnie z wymaganiami biznesowymi.
źródło
Zobacz, zamówienie ma wiele pozycji zamówienia (atrybut wielowartościowy). Zatem zgodnie z regułą tworzymy osobną tabelę.
Teraz załóżmy, że 2 klientów ma to samo zamówienie. Np. Kupują iPhone'a w tej samej cenie, z rabatem, w tym samym dniu itp. Idealnie więc powinny być dwie dokładne krotki dla zamówienia iPhone'a w relacji kolejności. Ale zgodnie z ograniczeniem relacji wszystkie krotki powinny być unikalne. Więc powiązajmy dwa zamówienia z tym samym problemem item_line_number.no do teraz. Teraz rozważ jedno z anulowań klienta. Jest zamówieniem na iPhone'a. Krotka numer_elementu zostanie usunięta. Teraz inni klienci, którzy kupili iPhone'a, również zostają usunięci z powodu korespondencji M: 1. Wreszcie baza danych jest niespójna. Dlatego używamy klucza deskryptora, który będzie uporządkowany. Usunięcie jednego zamówionego iPhone'a nie powoduje uszkodzenia bazy danych.
źródło