powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Слабые, сильные связи, ассоциации
58 сообщений из 58, показаны все 3 страниц
Слабые, сильные связи, ассоциации
    #40136486
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, помогите, пожалуйста, разобраться, на других форумах не могут помочь, неужели настолько сложные вещи описываю, непонятно:
Составляю базу данных для пиццерии (пользователи могут на сайте оформлять заказы), составил первую концептуальную модель (ER диаграмма),
1) по заданию должно быть хотя-бы 5 основных сущностей не учитывая "слабые" и ассоциации (судя по всему "сильных") и хотя-бы одна "слабая" сущность, в интернете прочитал,
слабая считается сущность которая логически зависит от другой сущности
Но ведь всё от чего-то зависит, заказы зависят от клиентов (оформили или нет), если не будет заказов, то и не будет пицц/других продуктов, работников, транспортных средств, значит все сущности кроме "клиент" слабые?. Или имеется в виду, что работники, то есть люди, будут жить даже если не будет заказов? (найдут другую работу, например)

2) Должно быть хотя-бы 2 ассоциации, я правильно понимаю, это значит две связи многие-ко-многим?
Может ли быть в моём примере Ассоциативная сущность "использует" между "пицца"/"не пицца" и "ингредиенты"? ведь в одной пицце/не пицце(например, пирожное, а если в той же таблице будет бутылка "Кока-колы"? меняется ли тип связи?) может использоваться много ингредиентов и каждый из ингредиентов может использоваться во многих пиццах?
*Может ли быть ассоциация "готовка" между "заказы" и "работники" с атрибутом "статус заказа"?

3) Требуется использовать как минимум одну конструкцию наследования, я так понимаю, в моём случае, "не-пицца" может наследоваться от "пиццы" и можно добавить атрибут "срок годности"?

И в принципе, если можно, проверьте пожалуйста, правильно я расставил связи?
1. клиенты заказы, 1:M (один клиент может сделать много заказов)
2. сотрудники заказы, 1:M (один сотрудник может делать много заказов +, возможно, один заказ могут делать несколько сотрудников (натирать сыр, раскатывать тесто, добавлять начинку?))
3. заказы пицца/не пицца, 1:М (в одном заказе может быть много пицц, одна пицца может быть в нескольких заказах?)
4. Сотрудники транспорт, 1:M (один сотрудник может пользоваться разным транспортом (самокат, скутер, автомобиль) и одним транспортом могут пользоваться много сотрудников?)
5. Пицца/не пицца ингредиенты, M:M (в одной пицце может использоваться много ингредиентов, один ингредиент может использоваться во многих пиццах)
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136487
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vaban4, Добавляю ER-диаграмму, но почему-то файл не появляется....
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136496
fkfka2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде бы, на первый взгляд все норм. Сильное-слабое, я с такими терминами не сталкивался, но, скорее всего, имеется ввиду внешний ключ который может быть NULL.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136497
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4,

Пицца и не-пицца у вас идентичные по структуре. Имеет смысл такое?

vaban4

5. Пицца/не пицца ингредиенты, M:M (в одной пицце может использоваться много ингредиентов, один ингредиент может использоваться во многих пиццах)


Это просто задачка или приближено к реальности? Если более менее реальное, то нужно продумать рецепты, а не притягивать ингредиенты прям к пиццам.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136520
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@PizzaPizza,
Лабораторная работа.
Я выбрал тему "пиццерия"
В концептуальной модели (ERD) должно быть 5 основных сущностей, минимум 1 слабая сущность, связи (1 : 1 , 1 : N, N : M, унарная), минимум две ассоциации, вот я и думаю, есть ли у меня на схеме 5 основных ("сильных") сущностей и какие могут быть ассоциации, уже 3 недели потратил, тяжёлая работа и никто объяснить/помочь не может....
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136521
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4
Здравствуйте, помогите, пожалуйста, разобраться, на других форумах не могут помочь, неужели настолько сложные вещи описываю, непонятно:

Ты слишком упираешь на теорию баз данных и слишком мало думаешь о самой базе. Отсюда и все проблемы.
Сильная связь или слабая это совершенно не важно. Просто сделай базу, а потом уже давай определение. Не надо подгонять физические сущности под теоретические измышления.

vaban4

Может ли быть в моём примере Ассоциативная сущность "использует" между "пицца"/"не пицца" и "ингредиенты"?
Пицца или не пицца это бред.

Заказчик заказывает продукт. В пиццерии работает от одного до тройки поваров (редко больше) и любой из них может вмешаться в подготовку заказа на любом участке (зайди в реальную пиццерию и посмотри или поговори с работниками). Значит кто готовил конкретный заказ можно не учитывать - они все готовили.

Значит тебе нужны таблица заказчиков, таблица заказов и таблица продуктов.
Один заказчик может сделать много заказов на протяжении нескольких дней. Значит делаешь связь 1-М.
Каждый заказ может содержать несколько продуктов - "две пиццы и три колы", например. Значит еще одна связь 1-М.
У продукта могут быть варианты (пицца с овощами или колбасой, кола такая или сякая, кофе с молоком или сливками). Значит делаешь таблицу добавки и привязываешь ее к продуктам. Связь 1-М. Только учти что добавки не могут идти к любому продукту. Это проще всего решается делением добавок на группы и добавлением атрибута к продуктам "брать добавки из такой-то группы". То есть нужна еще таблица групп.

Доставка это почти отдельная задача. Для ее решения в таблицу заказов достаточно добавить два поля - доставлено курьером А на транспорте Б. И все.
Либо сделать отдельную таблицу "доставка" и в таблице заказов ссылаться на нее одним полем. А уже в таблице доставки можно писать курьера, транспорт, время доставки, чаевые, отзыв клиента на перегар курьера и тд и тп.

Думай сначала о сущностях в физическом мире. А какая из них сильная-слабая с точки зрения теории БД - определишь уже после того как сделаешь базу.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136538
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl, А какие могут быть ассоциации между моими сущностями?
Может ли быть сущность "готовка" между "заказы" и "работники" с атрибутом "статус заказа"? (0,n - 0,n)
И
"Использование" между "работники" и "транспорт" с атрибутами "начало","конец" (формат у обоих дата) (1-1, 1-1)?

У учителя есть пример,
между сущностями "студент" и "учебная программа" ассоциация "оценки" с атрибутами "оценка" и "дата" (0, n - 0,n)
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136539
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

А как заполнять "mandatory" (связь между Заказы и Продукты)?
Заказ -> продукты связь должна быть обязательной? так как каждый заказ обязательно содержит один или больше продуктов (иначе пустой заказ) и каждый продукт может содержаться или не содержаться в заказе?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136540
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
С добавками не совсем понял.
Есть сущность "продукты" с атрибутами {ИД, Название, Количество(остаток), цена, номер добавки} и сущность "добавки" с атрибутами {ИД, Название, Количество} нужна ещё промежуточная таблица?
Допустим есть 6 видов добавок: {пицца с сыром, пицца с грибами, кола обычная, кола без сахара, кофе с молоком, кофе со сливками}
Для чего нужна ещё таблица групп? ведь если не нужна добавка (например в продуктах есть ещё готовые эклеры) можно написать 0 в значении атрибута "номер добавки"?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136541
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может лучше сделать так?
Три таблицы
блюда 1 -> M состав блюда M -> 1 Ингредиенты
И отдельную таблицу "добавки" где будет кола, кофе, пирожные (например), то есть готовые блюда. И в заказе могут содержаться добавки (необязательно) и блюда (обязательно).
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136542
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4,

то есть вам нужно продемонстрировать, что вы знаете понятия эти

Слабая связь: библиотеки и сущности. Клиент может существовать в базе и не делать никаких заказов. Сотрудник может существовать в базе и не выполнять никаких функций. Ингредиент может иметь запись, но нигде не использоваться.

Сильная связь: пицца не может не иметь связей с ингредиентами из которых она приготовлена и персоналом, который приготовил её.

Ассоциации - это скорее всего таблицы связей. Вероятно рецепт пиццы может быть таким примером. Есть ингредиенты и заказы пицц, а связь (ассоциация) между ними осуществляется таблицей рецептов.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136543
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4
White Owl, А какие могут быть ассоциации между моими сущностями?
Может ли быть сущность "готовка" между "заказы" и "работники" с атрибутом "статус заказа"? (0,n - 0,n)
И
"Использование" между "работники" и "транспорт" с атрибутами "начало","конец" (формат у обоих дата) (1-1, 1-1)?

У учителя есть пример,
между сущностями "студент" и "учебная программа" ассоциация "оценки" с атрибутами "оценка" и "дата" (0, n - 0,n)

Может конечно. Если ты хочешь отдельно записывать готовку. Например человек А, начал готовить в 12:00, закончил в 12:15, за это он заработал х копеек.
Если хочешь - можешь создать.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136544
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4
White Owl,
С добавками не совсем понял.
Есть сущность "продукты" с атрибутами {ИД, Название, Количество(остаток), цена, номер добавки} и сущность "добавки" с атрибутами {ИД, Название, Количество} нужна ещё промежуточная таблица?
Допустим есть 6 видов добавок: {пицца с сыром, пицца с грибами, кола обычная, кола без сахара, кофе с молоком, кофе со сливками}
Для чего нужна ещё таблица групп? ведь если не нужна добавка (например в продуктах есть ещё готовые эклеры) можно написать 0 в значении атрибута "номер добавки"?
Ну можно конечно и без этого, но тогда можно будет заказывать пиццу с молоком, а кофе с грибами.
Если хочешь этого избежать - разбиваешь добавки на группы: добавлять туда или сюда.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136546
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
"можно будет заказывать пиццу с молоком, а кофе с грибами"

А следить за тем, чтобы таких ситуаций не возникало, разве не будет сайт/графический интерфейс, база данных ведь просто хранилище данных?

То есть, например, на сайте клиент добавит в корзину эклеры и колу, колу у него будет возможность выбрать одну из двух вариантов, а вот эклеры нет.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136548
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4
White Owl,
А следить за тем, чтобы таких ситуаций не возникало, разве не будет сайт/графический интерфейс, база данных ведь просто хранилище данных?


Целостность и непротиворечивость бизнес-модели можно реализовать как в приложении так и в базе / бекэнде.
По хорошему это надо делать и там и там, потому, что ошибка на фронтэнде может привести к потере / разрушению данных в базе.

Опять же, у вас в задаче нет ничего про фронтэнд и надо, вероятно, полагать, что вся бизнес логика должна обеспечиваться в рамках выполнения задачи.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136551
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"разбиваешь добавки на группы: добавлять туда или сюда"

Не понимаю, как будет выглядеть сущность и какие будут атрибуты? какая связь будет с сущностью "продукты"?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136555
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашёл такую диаграмму, как она вам? может её стоит использовать + я добавлю наследование (физ/юр. лицо к "клиенты), унарная связь работники -> работники.
Чтобы добавить напитки нужно создать сущность "напитки" и соединить с сущностью "заказы"? (и связь будет такая же, как у "заказы" - "заказанные пиццы" 1-M ?)
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136560
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4
White Owl,
"можно будет заказывать пиццу с молоком, а кофе с грибами"

А следить за тем, чтобы таких ситуаций не возникало, разве не будет сайт/графический интерфейс, база данных ведь просто хранилище данных?

То есть, например, на сайте клиент добавит в корзину эклеры и колу, колу у него будет возможность выбрать одну из двух вариантов, а вот эклеры нет.
Следить конечно будет клиентский интерфейс. Но откуда он будет знать что можно с чем комбинировать?
Вот для этого и группы прописываются. Например у тебя будет группа: "пицце-подобное" и когда человек заказывает пиццу - интерфейс выдаст возможные добавки из этой группы. А если заказ будет на чай или кофе, то добавки будут браться из группы "горячий напиток".
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136561
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza
vaban4
White Owl,
А следить за тем, чтобы таких ситуаций не возникало, разве не будет сайт/графический интерфейс, база данных ведь просто хранилище данных?


Целостность и непротиворечивость бизнес-модели можно реализовать как в приложении так и в базе / бекэнде.
Да, можно. Но лучше повесить эту задачу на базу. И поменять при нужде проще - только в одном месте меняешь. И от нескольких независимых приложений-клиентов защита.

PizzaPizza
По хорошему это надо делать и там и там, потому, что ошибка на фронтэнде может привести к потере / разрушению данных в базе.
Нет, при правильном наборе ключей и ограничений на таблицах, ошибка в приложении может только дать ошибку в приложении. Или мусорный объект в базе, при этом он будет непротиворечив с точки зрения бизнес логики, и который можно будет удалить одной командой.
Но это конечно, в идеале.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136562
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl

PizzaPizza
По хорошему это надо делать и там и там, потому, что ошибка на фронтэнде может привести к потере / разрушению данных в базе.
Нет, при правильном наборе ключей и ограничений на таблицах, ошибка в приложении может только дать ошибку в приложении. Или мусорный объект в базе, при этом он будет непротиворечив с точки зрения бизнес логики, и который можно будет удалить одной командой.
Но это конечно, в идеале.


ИМХО если "мусорный объект в базе" это клиент с потерянными заказами или орфанный заказ, то это он не может быть не противоречив с точки зрения бизнес логики. Потому, что в редком бизнесе такие ошибки приемлемы и тем более "удалить одной командой" информацию при подобных ошибках может себе позволить только очень непритязательный бизнес.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136564
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza
White Owl

пропущено...
Нет, при правильном наборе ключей и ограничений на таблицах, ошибка в приложении может только дать ошибку в приложении. Или мусорный объект в базе, при этом он будет непротиворечив с точки зрения бизнес логики, и который можно будет удалить одной командой.
Но это конечно, в идеале.


ИМХО если "мусорный объект в базе" это клиент с потерянными заказами или орфанный заказ, то это он не может быть не противоречив с точки зрения бизнес логики. Потому, что в редком бизнесе такие ошибки приемлемы и тем более "удалить одной командой" информацию при подобных ошибках может себе позволить только очень непритязательный бизнес.
Почему не может??? Запросто может.

Вполне реальная ситуация:
- Звонит человек говорит что мол хочу стать вашим клиентом. Клерк говорит "ОК, диктуйте свое имя" и нажимает кнопку "добавить клиента".
- Звонок обрывается...
- В базе есть клиент с уникальным ID, но больше про него ничего не известно. Даже если тот-же самый человек позвонит - ему будет заново выдан ID при создании клиента.

И да, потенциальный клиент может пропасть в любой момент - может даже почти целиком пройти все интервью и потом заявить: "а знаете, я передумал, прощайте". А в это время уже в несколько физических таблиц были помещены новые записи описывающие этого человека, который так и не стал клиентом.
За год, в среднем, таких "мусорных клиентов" у нас набирается в среднем от пяти до десяти процентов от количества новых клиентов.

Баг в приложении? Возможно. Но этот баг существует уже около сорока лет - ядро приложения до сих пор живет на Cobol, а там откат транзакции сложен . И этот баг даже стал фичей, этих клиентов раз в год переносят из списка клиентов в список "потенциальных" клиентов, для оценки качества рекламы. Раз человек позвонил - значит реклама работает.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136565
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl

Вполне реальная ситуация:
- Звонит человек говорит что мол хочу стать вашим клиентом. Клерк говорит "ОК, диктуйте свое имя" и нажимает кнопку "добавить клиента".
- Звонок обрывается...
- В базе есть клиент с уникальным ID, но больше про него ничего не известно. Даже если тот-же самый человек позвонит - ему будет заново выдан ID при создании клиента.


опять же ИМХО, но ваш пример показывает ситуацию, которая никогда бы в принципе не случилась если бы я проектировал базу данных. Может это особенности кобола, но в рамках современных баз и приложений начинать транзакцию по нажатию кнопки если создается уникальный айди, я бы не стал.

К тому же эти примеры не совсем корректные - вы знаете, что эти конкретные записи бесполезные и бизнес-логика подразумевает их удаление. Мусорные и орфанные записи при отсутствии проверок на стороне базы появляются не так. Например, клиент добавляет заказ и выбирает то, что например невозможно в какой то конфигурации (пицца с пиццей как топингом или чай с курьером). Если у вас ошибка на стороне приложения, то в базу могут записаться либо пустые значения либо значения из других категорий с теми же id. Например, в качестве топинга у вас будет номер курьера доставки. А на выходе вы получите пиццу со случайным топингом, который совпадет с id курьера. Или же просто запишется нулл и будет пицца без топинга или топинг без пиццы висеть в базе. Потом может это с кем то соединиться и выйти еще смешнее.

Я к тому, что на стороне базы проверять полезно всегда.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136572
fkfka2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vaban4
тяжёлая работа

Я тебя умоляю, полдня максимум.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136586
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkfka2,

В чём смысл вашего сообщения? я делаю это задание уже 3 недели (каждый день читая разные сайты и внося изменения в диаграмму), похвастаться, что вы такой умный? так почему не написали ничего по существу?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136594
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vaban4
Нашёл такую диаграмму, как она вам? может её стоит использовать + я добавлю наследование (физ/юр. лицо к "клиенты), унарная связь работники -> работники.
Чтобы добавить напитки нужно создать сущность "напитки" и соединить с сущностью "заказы"? (и связь будет такая же, как у "заказы" - "заказанные пиццы" 1-M ?)


На картинке, которую я прикрепил, изображена концептуальная модель или логическая? а то имеются внешние ключи + ref таблицы (кстати зачем они нужны?)
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #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
Слабые, сильные связи, ассоциации
    #40136972
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor Tiegael,

И это нормально, что стрелка от Заказы показывает на Клиенты в физической модели?

Также, если инвертировать Clients - Addresses то получится Addresses Located Clients в физ. модели?

Это не значит, что заказы принимают клиентов и адреса находятся в клиентах?
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136987
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4,

Эээ. В таком случае, разберитесь сначала с той нотацией, которую вы используете. У вас отчетливо проблемы с чтением вашей собственной диаграммы.

В концептуальной модели у вас используется Crow's Foot, а в физической - какая-то другая, не помню названия (IE, что ли?). Открываете гугель, набираете crow foot notation cheat sheet, если уж она вам так нравится, и вызубриваете ее наизусть. Делов на 5 минут от силы. Ну или распечатываете и кладете листочек рядом с собой.

Лично я предпочитаю IDEF1X, но это дело вкуса. Главное поймите, что стрелки на вашей физической модели показывают не направление действия, а родителя в паре "parent-child". Похоже, для вас это неочевидно.

После того, как вы начнете читать эту информацию с листа, идете по связям и прикидываете, какая из двух связанных сущностей может существовать без другой, а какая - не может. Ну или, иными словами, какая появляется в базе сначала, а какая - потом. Так понятно?

Ответ на этот вопрос даст вам понимание, в какую сторону должна быть направлена связь. Надписи на связях лучше тоже переделать, потому что сейчас у вас там полный хаос, который вас только сильнее запутывает. Как вариант, можете формулировать эти глаголы так, как вы бы писали фразу на английском в формате "<Dominant Entity> <Acts On> <Child Entity>". Например:

  • Clients place Orders - у вас так и есть, оставляем;
  • Payment methods Pay Pay - complete hogwash. Если делать все единообразно, то должно быть что-то типа "Payment methods referenced by Payments". Окей, не самый удачный пример, но зато показывает, что типы платежей это не сущность, а всего лишь справочник;
  • Orders Pay Pay - должно быть Orders paid via Payments.
  • Addresses located Clients - эээ. Clients have Addresses! Тут сразу видно, что направление связи неправильное, потому что изначальная фраза не имеет смысла.
  • Employees prepare Orders - тут все правильно, но как я писал ранее, назначение сотрудника на заказ может произойти после того, как заказ сохранен в базе. Это не значит, что направление связи нужно менять на противоположное; вам всего лишь нужно сделать этот FK необязательным (снять галку в столбце Mandatory для данного атрибута в дочерней таблице).
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40136997
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor Tiegael,
Я составляю всё в powerDesigner, задание такое, после составления конц. модели сгенерировать лог. и физ. модель, в model options:
Концептуальная - E/R+Merise
Логическая Entity/Relationship
Физическая Relational
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40137002
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Payment methods Pay Pay - complete hogwash
pay это автоматически сгенерированная промежуточная таблица (связь M-M)
Я хотел написать, что Заказы оплачиваются Методами оплаты.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40137005
vaban4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Delivery_statuses -> have -> orders
По идеи в другую сторону должна смотреть стрелка (orders сущность должна быть родителем)
Но если инвертировать связь получиться, что у каждого заказа может быть несколько статусов заказа.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40137031
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vaban4,

DeliveryStatus это справочник, это видно просто по названию. Справочники никогда не ссылаются на реальные сущности, максимум на другие справочники. Так что направление связи у вас изначально было правильное.

Какой глагол в данном случае использовать, решайте сами. Предложенный мной подход хорошо работает для связей сущность-сущность, но по-видимому не очень хорош для связей справочник-сущность.

В идеале, справочников на концептуальной модели быть вообще не должно. Там должны быть только сущности. Но, поскольку я никогда не делал концептуалки в PD, я не смогу вам подсказать, как из этого выкрутиться. Возможно, там есть способ объявить атрибут сущности как справочный, и тогда PD вам сгенерирует таблицу-справочник, как минимум в физической модели, а возможно что и в логической. Копайте.
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40137101
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
Справочники никогда не ссылаются на реальные сущности, максимум на другие справочники.

Я бы не стал так категорично утверждать. Не говоря уже о глубоко философской сути различий между "справочниками" и "реальными сущностями".
...
Рейтинг: 0 / 0
Слабые, сильные связи, ассоциации
    #40137132
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Ennor Tiegael
Справочники никогда не ссылаются на реальные сущности, максимум на другие справочники.

Я бы не стал так категорично утверждать. Не говоря уже о глубоко философской сути различий между "справочниками" и "реальными сущностями".
Я уверен, можно найти весьма заковыристые граничные случаи, когда и справочник совсем не dimension, и сущность совсем не fact. В контексте данной задачи, этот принцип вполне подойдет, даже в такой категоричной формулировке.

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


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