Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Корзина или коллекция элементов в MySQL / 25 сообщений из 38, страница 1 из 2
25.09.2015, 07:55:18
    #39060818
ABariy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Добрый день форумчане. Возник вопрос по реализации корзины элементов в БД, предметная область - библиотека вуза. Принцип такой студент приходит в библиотеку просит либо одну либо больше одной книги (3 например) в БД заносятся данные о взятых книгах на какой срок взяты, когда взяты и т.д. Вот до чего дошёл:

Никак не могу догнать как сделать так чтоб в БД заносились данные сразу нескольких книг в корзине. Работа с БД будет через web приложение созданное на YII2
...
Рейтинг: 0 / 0
25.09.2015, 08:39:58
    #39060835
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Вы сначала проведите всё-таки анализ предметной области.
...
Рейтинг: 0 / 0
25.09.2015, 08:55:20
    #39060850
ABariy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Akina, таки провёл, а в чём собственно проблема?
...
Рейтинг: 0 / 0
25.09.2015, 08:57:36
    #39060852
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Ну, к примеру, мне непонятно, как "Выдача" (а это явно бизнес-процесс) стала самостоятельной сущностью.
...
Рейтинг: 0 / 0
25.09.2015, 09:04:59
    #39060859
ABariy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Akina, предлагаете "Выдача" сделать представлением?
...
Рейтинг: 0 / 0
25.09.2015, 09:08:23
    #39060861
ABariy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Akina, у меня мало опыта в проектировании БД, если подскажите как будет лучше или покидаете тематичных ссылок, буду благодарен
...
Рейтинг: 0 / 0
25.09.2015, 10:07:42
    #39060931
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Я предлагаю провести полноценный анализ, а не прикидывать одну сущность к другой сущности.

Навскидку (могу и ошибаться) выделятся следующие сущности: Читатель (Студент), Библиотекарь (Сотрудник), Книга, Заказ (Корзина). Выдача будет просто блоком атрибутов сущности Заказ. Ну и возможно дополнительное усложнение схемы (или обработки), если необходимо хранение истории.
...
Рейтинг: 0 / 0
25.09.2015, 10:16:45
    #39060939
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
ABariy,

Вам правильно говорят насчет изучения предметной области. БД - это модель предметной области. И не зная второго, невозможно спроектировать первое.

Насколько я себе представляю работу библиотеки, не нужна таблица "корзина книг", а вместо таблицы "выдача" либо должна быть таблица "операции" с отдельными записями на выдачу/сдачу книг, либо должен быть двойной комплект ряда полей, т.к. выдать и получить обратно книгу могут разные сотрудники, в разные даты и т.п. Вплоть до отдельных комментариев.
Возможно, имеет смысл добавить информацию вида "состояние книги" и/или "потеряна/уничтожена студентом" (в том смысле, что он ее не вернет уже никогда).
...
Рейтинг: 0 / 0
25.09.2015, 10:20:09
    #39060943
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
основные сущности
книга
студент
движение (выдача-возврат)

библиотекарь - это дополнительно.
можно больше ничего не городить.
какие книги на руках - определяем по движению, какие, когда, кому выданы
этого достаточно, все остальное - огород...
...
Рейтинг: 0 / 0
25.09.2015, 11:04:03
    #39060997
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
ABariy,

вы тут на сильных профессионалов нарвались и они, к сожалению, не дадут вам "скосить углы", то есть сделать по-быстрому и пойти пить пиво. )))

Да, изучение предметной области и т.п. - это все замечательно, но ради создания конкретной вашей софтины изучение предметной области это совершенно ни к чему. Если бы вы писали софтину для агропромышленного холдинга, то да...

Короче, я как боец с многолетним опытом советую вас следующее:

- - - - - - - - - - - -

1) группы книг и факультет таблицами не делать вообще, а ведите эти списки просто в файле. Если речь идет о php, то достаточно просто вести этот список в виде массива и хранить его через var_export()

массив - это комплект описание / метка, например

Код: php
1.
2.
3.
4.
5.
6.
7.
array
(
    "Фантастика" => "fant"
    , "Классика" => "clas"
    , "Ужасы" => "uzas"
    , ....
)



В таблице код группы сделайте char(8) и храните там буквенные идентификаторы.
То же самое с факультетами

- - - - - - - - - - - -

2) корзина книг и выдача сделайте одной таблицей и назовите её операции
3) выкиньте колонку возврат и добавьте колонку state char(4), а в которой бы будете хранить идентификатор типа операции

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
array
(
    "Заявка" => "zav"
    , "Выдано" => "on"
    , "Возвращено" => "back"
    , "Утеряно" => "boom"
    , ....
)



- - - - - - - - - - - -

4) объедините таблицу сотрудник и студент в одну и назовите её юзер
5) введите поле who char(4)

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
array
(
    "Сотрудник" => "sot"
    , "Студент" => "stud"
    , "Препод" => "prep"
    , "Чужие" => "alie"
    , ....
)



6) не бойтесь, что под какой-то статус какие-то поля будут лишние и пустые
например, для сотрудника есть поле "дата увольнения" и она лишняя для студентов, а для студентов есть поле "факультет" и оно лишнее для сотрудников, а для преподов есть поле "уч.степень" и оно лишнее для кого-то ещё. Ну и хрен с ним. Базе от этого пофиг, а вы на крайняк, если будет не лень просто будете скрывать эти поля в форме в зависимости от выбранного переключателя типа пользователя системы. Хотя если лень, то можно и не скрывать, потому что у сотрудника тоже может быть ученая степень и факультет, а у препода может быть дата увольнения.

- - - - - - - - - - - -

Итого всего 3 таблицы: товар, операции, юзеры

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

Удачи!
...
Рейтинг: 0 / 0
25.09.2015, 11:16:56
    #39061024
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
LumixЕсли речь идет о php, то достаточно просто вести этот список в виде массива и хранить его через var_export()Хардкодить данные???!!! Святотатство!!!

Если уж мы уже используем СУБД, то накой эти вспомогательные списки? (это риторический вопрос)
...
Рейтинг: 0 / 0
25.09.2015, 11:26:42
    #39061049
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
miksoftLumixЕсли речь идет о php, то достаточно просто вести этот список в виде массива и хранить его через var_export()Хардкодить данные???!!! Святотатство!!!

Если уж мы уже используем СУБД, то накой эти вспомогательные списки? (это риторический вопрос)

неее, var_export() это не хардкод
это хранение данных в файле
скорость доступа к этим данным по сравнению мускулом на порядки выше
а изменять эти списки можно как обычно через форму справочника
просто они хранятся не в базе, а в файле
подобное решение всегда выгодно, когда
1) элементов в списке меньше 666
2) они меняются редко
3) функционально эти списки носят носят меточный характер, то есть используются как метки
(классика жанра - это различные статусы, ну а на втором месте стоят различные группировочные признаки)
...
Рейтинг: 0 / 0
25.09.2015, 11:32:19
    #39061065
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
жесть какая
часть данных в БД, часть в файлах... ещё одна часть под фвмас, наверное?
...
Рейтинг: 0 / 0
25.09.2015, 11:33:10
    #39061067
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Lumixскорость доступа к этим данным по сравнению мускулом на порядки вышеНу да, миллисекунда от микросекунды отличается аж на три порядка. Вот только пользователь этой разницы не заметит.
Lumixподобное решение всегда выгодно, когдаКогда разработчик всего один и не планируется, что его детище переживет его в пределах конкретной организации. А также когда не планируется использовать сторонних средств построения отчетов, экспорта и т.п.

Впрочем, конкретно эта задача очень примитивная и я ни на чем не настаиваю. Как бы ни было сделано - скорее всего и так сойдет.
...
Рейтинг: 0 / 0
25.09.2015, 11:38:50
    #39061076
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
tanglirжесть какая
часть данных в БД, часть в файлах... ещё одна часть под фвмас, наверное?

ой, а фвмас - это шо це токке?


miksoftLumixскорость доступа к этим данным по сравнению мускулом на порядки вышеНу да, миллисекунда от микросекунды отличается аж на три порядка. Вот только пользователь этой разницы не заметит.

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

самая главная мотивация - это максимальное упрощение отладки, а значит и dramaticcaly снижение требования к минимальной квалификации кодера, способного сие софтзверьё обслуживать
...
Рейтинг: 0 / 0
25.09.2015, 11:46:04
    #39061092
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Lumixtanglirжесть какая
часть данных в БД, часть в файлах... ещё одна часть под фвмас, наверное?ой, а фвмас - это шо це токке?Это не к ночи будь помянуто. А для данного слова любое время - "к ночи".
Lumixсамая главная мотивация - это максимальное упрощение отладкиСтранное упрощение, когда вместо объекта уже известного, понятного и используемого типа вводится новый, неизвестный тип. Как по мне, так это усложнение.
...
Рейтинг: 0 / 0
25.09.2015, 12:45:21
    #39061182
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
ABariyAkina, таки провёл, а в чём собственно проблема?

Ну, хотя бы в том, что книги без ISBN -- это какой-то нонсенс...
...
Рейтинг: 0 / 0
25.09.2015, 12:48:03
    #39061186
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
ABariyAkina, таки провёл, а в чём собственно проблема?

Далее.
авторов у книги может быть много.

У автора может быть много книг.

сотрудник может быть одновременно студентом.

Самостоятельная ли сущность "выдача" -- дело 20-е, хотя я бы тоже не делал самостоятельной -- не за чем.
...
Рейтинг: 0 / 0
25.09.2015, 12:51:26
    #39061192
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Lumixскорость доступа к этим данным по сравнению мускулом на порядки выше
а изменять эти списки можно как обычно через форму справочника


Ещё одна твоя ошибка.
Скорость работы -- далеко не самый важный критерий при оценке качества ПО.
...
Рейтинг: 0 / 0
25.09.2015, 13:06:47
    #39061212
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
MasterZivСкорость работы -- далеко не самый важный критерий при оценке качества ПО.

Я понимаю, что сейчас будет жесткий оффтоп, но какие нынче критерии окромя скорости работы частовызываемых операций считаются более важными при оценке качества ПО? Чисто из любопытства хочется узнать, чтобы быть в тренде...
...
Рейтинг: 0 / 0
26.09.2015, 21:50:20
    #39062128
ABariy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
Спасибо вам, сильные форума сего, была переработана структура под ваши советы:



Вопрос с корзиной остался открыт

p.s. белая пелена - мозилла крашнулась, в принципе итак все различимо
...
Рейтинг: 0 / 0
26.09.2015, 21:53:26
    #39062131
ABariy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
miksoft,
Насколько целесообразно вводить 2 записи на путешествие книги? В итоге придётся 2 раза вводить одни и те же данные: студент, библиотекарь (не всегда), книга и т.п. Шанс ошибки растёт
...
Рейтинг: 0 / 0
26.09.2015, 23:02:25
    #39062174
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
ABariymiksoft,
Насколько целесообразно вводить 2 записи на путешествие книги? В итоге придётся 2 раза вводить одни и те же данные: студент, библиотекарь (не всегда), книга и т.п. Шанс ошибки растётНет, шанс ошибки не растет.
Две отдельных записи могут понадобиться для случаев, когда потенциально возможно добавление новых типов операций. Например, продление книги. В некоторых библиотеках жестко лимитируется срок возврата книг, но при необходимости читатель может обратиться к библиотекарю и попросить продлить этот срок. Тогда в таблицу может быть внесена запись "продление срока" и новый срок будет исчислять уже с даты этой записи.
...
Рейтинг: 0 / 0
27.09.2015, 22:10:01
    #39062708
ABariy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
miksoftABariymiksoft,
Насколько целесообразно вводить 2 записи на путешествие книги? В итоге придётся 2 раза вводить одни и те же данные: студент, библиотекарь (не всегда), книга и т.п. Шанс ошибки растётНет, шанс ошибки не растет.
Две отдельных записи могут понадобиться для случаев, когда потенциально возможно добавление новых типов операций. Например, продление книги. В некоторых библиотеках жестко лимитируется срок возврата книг, но при необходимости читатель может обратиться к библиотекарю и попросить продлить этот срок. Тогда в таблицу может быть внесена запись "продление срока" и новый срок будет исчислять уже с даты этой записи.
Ага, хорошо. Что посоветуете с корзиной книг по типу человек приходит и берет несколько книг, чтоб они как-то были объединены, кроме как костылей со стороны клиента ничего в голову не лезет.
...
Рейтинг: 0 / 0
27.09.2015, 22:12:28
    #39062710
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корзина или коллекция элементов в MySQL
ABariyчтоб они как-то были объединеныЗачем?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Корзина или коллекция элементов в MySQL / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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