:: Не фоксом единым
Проектирование СУБД "Учет школьного питания" - PostgreSQL
sphinx
Автор

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
[attachment 36534 _SQL.ZIP][attachment 36535 diagramma_20230410.jpg]Коллеги, приветствую!

Нужны советы и поправки в проектируемую базу.
В приложении набросал структуру таблиц и INSERTы для каждой.
Пока стоят такие вопросы.

1) Надо как-то прикрутить понятие Роль (например: Учитель, Родитель, РаботникСтоловой ). Известно, что при замене болеющего Учителя -
его функции выполняет другой. Тут можно допустить, что все замены заранее известны, у каждого какие-то три определенных класса. Учитель вводит пароль, привязанный к определенному классу.

Структура, видимо, такая:
ID - идентификатор записи
ID_CLASS - идентификатор класса
ID_TEACHER - идентификатор учителя
(и вкуда роль привязать?)


2) Посмотрите журнал питания (journal) и его связь с календарем (это по неделям, я его сам составил на 2023 год. )
Если криво/неправильно/негибко - значит видите, как лучше. Буду рад заценить.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Проектирование СУБД "Учет школьного питания" - PostgreSQL
Владимир Максимов

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
У тебя сам подход не вполне корректен. Ты уже привязал "роли" к структуре данных. Надо более абстрактно данные организовать

- Персоны - ФИО, адреса, телефоны
- Роли - Ученик, Учитель, Родитель, Работник Столовой
- Ученики - те персоны, которые имеют роль "Ученика"
- Учителя - те персоны, которые имеют роль "Учителя"

При такой структуре, одна и та же "персона" может иметь несколько ролей. Нет жесткой привязки к таблице "учителей" при выборе заместителя. Вполне можно, например, "ученика" указать как выполняющего роль "учителя".
Ratings: 0 negative/0 positive
Re: Проектирование СУБД "Учет школьного питания" - PostgreSQL
sphinx
Автор

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
[attachment 36542 testdb-public_002.png]


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Проектирование СУБД "Учет школьного питания" - PostgreSQL
sphinx
Автор

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Пароль вводится Родителем для своего сына/дочери или Учителем для управления классом. Да, у Учителя может быть несколько классов - это учитываем в таблице GRANTS.

А по Журналу питания есть замечания/предложения?

И как лучше учесть факт посещения учеником (да и остальными персонами, кроме родителей) завтрака и обеда? Может прям в таблице PERSONS добавить 2 логических поля IS_BRFST и IS_DINNER?


------------------
"Veni, vidi, vici!"(с)




Исправлено 1 раз(а). Последнее : sphinx, 15.04.23 07:00
Ratings: 0 negative/0 positive
Re: Проектирование СУБД "Учет школьного питания" - PostgreSQL
Владимир Максимов

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
Ты делаешь слишком жесткую структуру. Может быть, для твоей задачи этого достаточно, но я бы делал более гибко


1. Связь "персон" и "ролей" - через таблицу-посредник, чтобы реализовать связь вида много-ко-многим.

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

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


2. Таблица "персон" - это информация, не связанная с выполнением каких-то обязанностей или действий. Т.е. не надо в нее добавлять информацию о классе/учителе/обеде. Эта информация должна быть вынесена в отдельные таблицы.

Ну, например, в отношении привязки к классам - это таблица-посредник между таблицей "класс" и таблицей "персона".

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

То же самое по посещению чего-либо. Связь много-ко-многим. Есть "что-либо" (завтрак, обед, урок, класс), есть таблица "персон" и есть таблица связи между "чем-либо" и "персоной". В таблицу связи можно добавить разные поля. Например, время посещения с..по..


3. Журнал питания - это просто "частный случай".

Т.е. создается таблица "график питания"

- Тип (Завтрак, Обед)
- Дата
- Время
- Ссылка на меню (если нужно)

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


PS: Хотя, может, это у меня уже "проф.деформация" связанная с конкретным приложением, в котором я сейчас работаю. Там множество связей вида много-ко-многим. Но, возможно, в твоей задачи такая гибкость не нужна и достаточно будет связей вида один-ко-многим
Ratings: 0 negative/0 positive
Re: Проектирование СУБД "Учет школьного питания" - PostgreSQL
sphinx
Автор

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Замечания и предложения вполне конструктивны. Но Вы правы, очень бы не хотелось усложнять структуру, времени на написание немного, это бы успеть.
Может что-то еще успеем поменять, а что-то оставим. Про перевод из класса в класс я думал (но я считал по одной параллели, типа из-за неуспеваемости перевели в соседний класс). Переход с сентября в следующий класс - не продумывал, но решил бы через отдельный функционал, он нужен раз в год, и переход явно не ручной, а массовый - сразу по всем по классам. И тут тоже не все просто, по идее нужна таблица перехода, например, - из 8В в 9А (это я так переходил, даже сразу в 10А). А вот эту таблицу должен составить, видимо, Администратор (Завуч, Директор. КтоТоЕще).

Спасибо, Владимир!


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Проектирование СУБД "Учет школьного питания" - PostgreSQL
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Владимир Максимов
PS: Хотя, может, это у меня уже "проф.деформация" связанная с конкретным приложением, в котором я сейчас работаю. Там множество связей вида много-ко-многим.

Не наговаривая на себя

Всё правильно, лучше "День потратить и за час долететь" (с) чем потом долго мучиться с "кривой" архитектурой.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/1 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 7 (Гостей: 7)

© 2000-2024 Fox Club 
Яндекс.Метрика