Это в основном вопрос о том, что такое слабые сущности? Когда мы должны их использовать? Как они должны быть смоделированы?
В чем основное различие между нормальными и слабыми объектами? Соответствуют ли слабые объекты объектам-значениям при проектировании на основе домена?
Чтобы помочь сохранить вопрос по теме, вот пример из Википедии, который люди могут использовать для ответа на этот вопрос:
В этом примере OrderItem
была смоделирована как слабая сущность, но я не могу понять, почему она не может быть смоделирована как нормальная сущность.
Другой вопрос: что если я хочу отслеживать историю заказов (т.е. изменения в ее статусе), это будет нормальная или слабая сущность?
OrderItem
зависит от того,Order
как неorderItems
может существовать, не принадлежа кorder
, но я не понимаю, почему я не могу использоватьItemLineNumber
только для идентификации элемента ?! На самом деле, я мог бы простоItemLineNumber
сгенерировать автоматическиint
для обеспечения уникальности и использовать внешний ключ,orderID
чтобы связать две сущности вместе ?!Не
OrderItem
может существовать без заказа или продукта. Следовательно, он слабый, поскольку его контролируют зависимости.Например, если вы удалите заказ, у вас не будет возможности узнать, куда товар должен быть отправлен. Или, если вы удалите продукт, вы не знаете, что отправить.
источник
В соответствии с моим пониманием в приведенной выше диаграмме они включили две сущности / таблицы вместо одной, то есть заказов и позиций заказов, так что доступ к информации становится легким, когда разрабатываются две сущности. И позиция заказа зависит от сущности заказов, поэтому она считается слабой сущностью. потому что характеристика слабой сущности зависит от другой сущности. Предположим, если вы не включите сущность позиции заказа, как вы сможете узнать цену позиции заказа, скидку. и, как сказал jgauffin. Если вы, например, удалите заказ, у вас не будет возможности узнать, куда товар должен быть отправлен. Или, если вы удалите продукт, вы не знаете, что отправить.
Диаграмма ER должна быть разработана в соответствии с требованиями бизнеса.
источник
Видите, у заказа есть много элементов заказа (многозначный атрибут). Таким образом, согласно правилу мы создаем отдельную таблицу.
Теперь предположим, что 2 покупателя имеют один и тот же заказ. Например, оба покупают iPhone по одинаковой цене, со скидкой, в одну дату и т. Д. Так что в идеале должно быть два точных кортежа для заказа iPhone в порядке расположения. Но согласно ограничению отношения все кортежи должны быть уникальными. Итак, давайте связать два заказа с одной и той же проблемой item_line_number.no до сих пор. Теперь рассмотрим один из клиентов отмены. Это iPhone порядок. Также будет удален кортеж item_line_number. Теперь другие клиенты, которые купили iPhone, также удаляются из-за переписки M: 1. Так что, наконец, база данных противоречива. Вот почему мы используем дескрипторный ключ, который будет orderid. Таким образом, удаление одного заказанного iPhone не приведет к повреждению базы данных.
источник