powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Слабые, сильные связи, ассоциации
25 сообщений из 58, страница 2 из 3
Слабые, сильные связи, ассоциации
    #40136596
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza
опять же ИМХО, но ваш пример показывает ситуацию, которая никогда бы в принципе не случилась если бы я проектировал базу данных. Может это особенности кобола, но в рамках современных баз и приложений начинать транзакцию по нажатию кнопки если создается уникальный айди, я бы не стал.
Да, современные учебники учат что надо сначала полностью набрать данные по объекту на стороне клиента, а потом разом загонять все в базу за одну транзакцию. С возможностью отката если во время транзакции произошел сбой.

PizzaPizza
Я к тому, что на стороне базы проверять полезно всегда.
Ну так а я о том и говорил что проверки на целостность данных на уровне базы намного проще, важнее и нужнее чем аналогичные на уровне клиента.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136598
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
PizzaPizza,
Правильно ли составил диаграмму?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136599
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
PizzaPizza,
Правильно ли составил диаграмму?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136619
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136620
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza,

?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136632
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4,

А в каком месте у вас ассоциации?

ЗЫ. не ждите быстрых ответов, люди заняты сейчас, мягко говоря другими делами. Кто коктейли готовит... ггг
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136633
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza, Ассоциации пока не придумал + хочу проверить правильность того, что на данный момент есть. (Может связь неправильная, может ещё какие-то грубые ошибки)
Извините, что часто пишу, делаю это 3 недели и осталось 2 дня, а нужно доделать концептуальную схему, потом перевести в логическую, и физическую и проверить их.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136635
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4,

для лабораторной вроде годится.
Вам надо быть способным объяснить смысл каждой связи и таблицы. Например мне физические/юридические лица не очень понятны, полагаю вас могут тоже спросить.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136636
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza,
Этот пример я сам не понял, взял из презентации учителя, в разделе "пример наследования"
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136641
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4
PizzaPizza,
Этот пример я сам не понял, взял из презентации учителя, в разделе "пример наследования"


Ну... непонимание тут чревато.

Вот вы приводите структуры таблиц и связи. Вы уверены что не надо показывать как эти связи реализованы на уровне таблиц? Вы пробовали эту структуру не теоретически а практически собрать на любом SQL и опросить?

Вот у вас есть ID клиента и есть ID адреса клиента (тоже вопрос, с чего у вас один физический клиент по разным адресам то? юрики - это сложнее но они обычно пиццу не заказывают). А как вы хранить будете связь клиента с адресом? Или это в рамках данной схемы не важно?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136800
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
Здравствуйте,
Добавил ассоциации и подправил атрибуты, можете, пожалуйста, проверить? а то если начну генерировать логическую и физическую модель ошибка может пойти дальше.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136812
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Также,
1) связь между Заказами и Напитками/Пиццами должна быть M-M?
ведь в каждом заказе может быть много пицц/напитков и одни и те же пиццы/напитки могут быть во многих заказах?
2) лучше между Начинки и Пиццы сделать связь M-M, так как в одной пицце можно использовать разные начинки и одна начинка может использоваться во многих пиццах?
3) Ассоциация Комбо может существовать для упрощения создания акций и быстрого изменения её же? То есть, название "комбо" и стоимость (например, пицца с грибами+пицца с сыром на 200 рублей дешевле, чем, если покупать по отдельности)
4) Аналогично с ассоциацией "эксплуатирует", позволяет быстро узнать, когда и какой сотрудник начал/закончил пользоваться определённым транспортом?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136824
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4,

  • Juridical - это вам так гугл транслейт перевел? Назовите их Individuals и Companies, всем будет понятнее. В англоязычных системах так и делают, к слову.
  • Клиентов лучше связать с адресами как 1:М, т.е. один клиент имеет 1 или более адресов. Да, это приведет к тому, что у вас будут повторяющиеся адреса между разными клиентами, но поверьте, это гораздо меньшая печаль, чем когда у вас М:М и вам нужно реализовывать развязку одного адреса в несколько разных. Не очень понимаю, кстати, какой у вас сейчас тип связи - в обратную сторону, что ли? У каждого клиента не более одного адреса, и по одному адресу на несколько клиентов? Не делайте так.
  • Payment methods это хорошо, но где у вас сами Payments? Учтите, что платеж это часть заказа, а не клиента. Для простоты можно считать, что каждый заказ оплачивается ровно одним платежом; это позволит вам не создавать отдельную таблицу платежей, а просто включить соотв. атрибуты непосредственно в заказ. В любом случае, вам потребуется ссылка на метод платежа из заказов - либо напрямую как 1:М, либо через таблицу-связку (на ваше усмотрение).
  • Ссылка на справочник состояния доставки непосредственно из таблицы заказов означает, что вы отказываетесь от хранения истории изменения статуса доставки. Это не плохо и не хорошо, вам просто нужно понимать, что вы при этом теряете. Например, провести разбор полетов в случае проблемы с доставкой у вас не получится, потому что историю вы не сохраняете.
  • Разделение товаров на пиццы и напитки крайне примитивно. У нас, например, Dominos продает много чего, что не попадает ни в одну из этих категорий.
  • Топпинги выглядят как справочник, но связь почему-то в противоположную сторону. То же самое, в общем-то, и с напитками: связь должна быть М:М. Учтите, что в реальной БД (за что я не люблю концептуальные модели) у вас будет таблица-связка OrderItems, и в ней вам придется реализовать внешние ключи, с одной стороны, на Orders (что просто), а с другой на доступные товары, и вот тут начинается веселье. Я например не выношу пепперони и прочие колбасные вещи, поэтому в моих заказах я выкидываю эти ингредиенты и добавляю либо Pork, либо Ham. Где вы собираетесь хранить такие кастомные позиции - прямо в OrderItems, в виде JSON-блоба? Так можно все что угодно хранить, реляционная модель будет вообще не нужна. Добавьте супертип для товаров, примерно в том же стиле что и клиенты = (юрики + физики), и эту таблицу товаров свяжите М:М с заказами.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136890
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor Tiegael,
Прежде всего, это первая лабораторная работа по предмету базы данных :)

2) Клиенты - адреса у меня M-M, логика такая: у 1 клиента может быть много адресов (много квартир, дача и т.д.) и один адрес может быть закреплён за несколькими людьми (семья, родственники)

3) Про payments честно сам не понял, почему сущность соединена с "Клиенты", а не с "Заказы" (за основу была взята вот эта диаграмма

Ennor TiegaelВ любом случае, вам потребуется ссылка на метод платежа из заказов - либо напрямую как 1:М, либо через таблицу-связку
Имеется в виду нужно соединить таблицу Способ оплаты с таблицей Заказы связью 1-M? (а удалить связь между Способы оплаты и Клиенты надо?)

4) Ассоциация нужна просто, чтобы хранилось текущее состояние заказа (ну и потому, что по условию задания требуется создать две ассоциации)

6) Да, должна быть М:М.
В одной пицце может быть много начинок и одна начинка может использоваться во многих пиццах.
Когда будет окончательно готова концептуальная модель, она будет преобразована в логическую и там должна будет появиться промежуточная таблица, где будет храниться ID пицц и ID начинка, как я понимаю.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136899
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая связь должна быть?
Я думал одним методом оплаты (наличные, банковский перевод) могут воспользоваться многие клиенты и один клиент может воспользоваться разными способами оплаты(сделал два заказа подряд, но один оплатил электронно, а второй оплатит при получении)
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136912
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После изменений.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136933
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4,

vaban4
Клиенты - адреса у меня M-M
В лабораторной проканает. В реальной жизни вы очень быстро пожалеете о таком решении. Я однажды так сделал, и понял что ошибся, когда начал писать код для разъединения адреса разных клиентов. Я его написал, конечно, но больше я так проектировать не собираюсь, и вам не советую. Экономия на спичках.

vaban4
Имеется в виду нужно соединить таблицу Способ оплаты с таблицей Заказы связью 1-M?
Да, но не напрямую. У вас М:М отношение между способами оплаты и клиентами, и это правильно, т.к. каждый клиент может платить по-разному, а если он вам реально доверяет, может даже разрешить вам хранить у себя его платежные данные, для ускорения оплаты в будущем . Только вот данные эти будут храниться в дополнительной таблице-связке, которая на вашей диаграмме отсутствует (точнее, она есть, но обозначается линией М:М отношения). В идеале, именно на эту таблицу-связку вы захотите ссылаться из Платежей, иначе непонятно, например, каким именно из 5 своих киви-кошельков заплатил клиент.

Учитывая вышесказанное, будет лучше, если вы сразу сделаете отдельную таблицу платежей. Даже если она де-факто будет 1:1 с заказами, платеж это отдельная сущность, и лучше сделать отдельную таблицу. Например, человек оплатил заказ, а платеж не прошел (по любой причине). Значит, клиенту придется пробовать другие методы оплаты, пока не найдется рабочий вариант. В этом случае у вас будет несколько платежей к одному заказу, но только один из них будет в состоянии Approved.

vaban4
После изменений.
#6 - у вас опять будет 2 таблицы OrderItems, вы понимаете это? Из такой модели вы получите OrderPizzas и OrderBeverages, и они не будут отличаться друг от друга вообще ничем, кроме названия и второго FK. Но весь ваш код будет вынужден всегда делать UNION ALL между этими таблицами, потому что позиции каждого заказа размазаны между ними.

Когда я еще жил в россии, я увольнял за меньшее :). Что на это скажет препод, думаю, несложно догадаться.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136939
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor Tiegael,

Тогда можно объединить напитки и пиццы в общую таблицу "блюда"?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136940
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такая логическая модель получается.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136941
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот в физической модели появились ошибки.

1) Заказа оплачиваются способами оплаты, а не наоборот.
2) Сотрудники используют транспорт, а не наоборот.
3) Клиенты размещают заказы, а не наоборот.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136953
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4
После изменений.
В голову приходят следующие неудобные вопросы:

  • Как клиенту сохранить свои платежные данные, для последующего использования?
  • Как оплатить заказ в несколько платежей?
  • Почему сотрудник зависит от наличия в базе его адреса? Нет адреса - нет сотрудника?
  • Order is delivered by vehicle - delivered where? Как из заказа узнать, на какой адрес должна делаться доставка?
  • Что это за 2 фиолетовые шняги, Combo и Exploits? Почему одна из них существительное, а вторая - глагол?
  • Что делать, если заказ настолько большой, что для его выполнения приходится привлекать более одного сотрудника?
  • С каких это пор телефонный номер содержит всего 8 цифр? Что делать, если номер начинается с ноля? (не шутка, в Австралии практ. все местные телефонные номера начинаются с ноля)
  • Как я уже писал в предыдущем посте: в чем причина разделения позиций заказа на 2 таблицы?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136956
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor Tiegael,

авторв чем причина разделения позиций заказа на 2 таблицы?
Я уже объединил пиццы и напитки, чуть выше посмотрите, пожалуйста.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136957
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4
А вот в физической модели появились ошибки.
Ага, в физической модели вы кое-что пофиксили, хорошо. Тогда вот вам еще:

  • Вы уверены, что вам действительно нужно хранить в этой системе адреса сотрудников? Это довольно таки персональные данные, им место в отдельной системе - либо HR, либо корпоративной ERP. Если, конечно, под "сотрудниками" вы не понимаете рестораны, открытые на условиях франшизы (как тот же Dominos, например). Но тогда непонятно, какая тут может быть организационная иерархия. В общем, если вы откажетесь от адресов сотрудников, то можно будет инвертировать связь Clients - Addresses и все будет нормально.
  • В момент сохранения заказа в базу, в общем случае, еще может быть неизвестно, какой именно сотрудник им займется. У вас же mandatory FK между этими двумя таблицами. Сделайте его хотя бы опциональным, что ли.
  • Не забудьте добавить адрес доставки для заказа.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136962
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor Tiegael,

Вы хотели написать "инвертировать связь Clients - Orders"? Так как со связью Clients - Addresses всё нормально, клиенты находятся по какому-то адресу.
Или можно оставить так, ведь Заказы размещают клиенты или на схеме получается, что заказы размещают клиентов?

У меня получается Заказы ссылается Клиенты, который ссылается на Адреса, так нельзя делать?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136966
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4
Вы хотели написать "инвертировать связь Clients - Orders"?
Нет, я написал ровно то, что хотел написать. Связь Clients - Orders у вас правильная, с ней все в порядке.

А вот клиент у вас в данный момент может иметь ровно один адрес, в результате чего, если человек заказывает доставку не себе домой, а например себе в офис, или друзьям, у которых он в гостях (или просто он живет на два дома), то ему каждый раз придется менять свой адрес, при этом предыдущий будет затираться.

Самое плохое в таком подходе то, что вы не сможете на сайте показать клиенту его адресную книгу.
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 2 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Слабые, сильные связи, ассоциации
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]