Здарова, аноны. В /pr/ бд треде никого, поэтому запрошу помощь здесь /b/ратья.У меня есть БД "студенты сдают проект".Основные сущности на пикрилейтед. Только вопрос вот в чём. У меня по ТЗ препод (teacher) может быть и руководителем (curator) проекта, и проверяющим (comission_member). Как рациональнее всего сделать разделение учителей на кураторов и участников комиссии? Обяз ли для этого создавать подсущности, которые будут хранить только айди? ХелпКуратор просто чел, числящийся в проекте. Участник комиссии ставит оценку проекту: в таблицу project_mark заносится 3-5 оценок от разных челов из комиссии
>>215861974 (OP)Есть два подхода по Кнуту и по Дейту.1. Создать до поля кортежи для кураторов/принимающих.2. Создать 2 сущности мапинга : Кураторы и Принимающие. Каждая со своим id и внешним ключом для преподавателя.Я всегда предпочитал второй: он естественный, его проще модифицировать и он стремиться к первой нормальной форме, а абстракции не протекают.
>>215862485Да.Допустим завтра тебе скажут, что членом комиссии может быть другой студент, тогда все что тебе нужно будет сделать, это добавить одно поле признак в Сущность Принимающего.
>>215861974 (OP)у тебя есть объекты, какие-то люди. иногда можно считать, что объекты разные, несмотря на то что люди, например что преподы и ученики не пересекаются, поэтому ты берешь одинаковых в целом людей, но суешь в две таблицы.а еще у тебя есть отношения прямо вот в том смысле, про подмножество декартового произведения, и вот некоторые люди у тебя бывают в некоторых отношениях. и под эти отношения ты заводишь отдельные таблицы, и тебе норм. бесполезные таблицы в одну колонку бесполезны, можешь ссылаться куда надо сразу. будет понятно что куратор это такой препод. а под звездочку проверяющих связка к преподам еще раз.
>>215862686В первой ссылке паттерн используется, если поля разные. Для каждого типа своя таблица.Если поля одинаковые или почти одинаковые, то таблица одна для всех, но указывается тип в столбце. http://design-pattern.ru/patterns/single-table-inheritance.html
>>215862974При этом наследовании я в потомках храню лишь ссылку на субтаблицу? Например:В данном случае у меня будетteacher (int id, String name, Date hiringDate)и два наследника у которых будет одно поле-ссылка на teacher, верно? (куратор от комиссии полями не отличается) Выходит это single table inheritance?
>>215863226STI это когда на всех одна таблица. Там поля всех сущностей плюс поле, в котором указывается тип данных.У тебя препод может быть всеми сразу или только препод-куратор или препод-комиссия?
>>215863522он может быть только:п-куратор, п-комиссия или п-куратор-комиссия.Именно из-за того, что он может быть и куратором и комиссией одновременно у меня и возник вопрос, как рациональнее сделать разделение.
>>215863611Можно сделать сущность тичер и роли добавить. В методе, который ставит оценку надо будет проверять является ли препод оценщиком.Наследование не нужно тогда.
>>215861974 (OP)а какие кейсы вообще по этой базе гонять будут? ну т.е. ты сейчас городишь какую-то статику, а транзакции какие нужны?
>>215861974 (OP)ну т.е. понятно что никакие, и это упражнение на рисование стрелочек, но вдруг в задании чото есть об этом. или может аналитика какая нужна, какие вообще запросы должны работать по этой схеме
>>215863759Я так раньше подумал, сразу впихнуть в тичера два поля булевых: является ли куратором и является ли комиссией.
>>215863900Я в рамках курсача веб приложуху делаю на джаве. Транзакции никакие не нужны. Мне просто нужно сделать простенькую бд и подгружать данные запросами. По сути проект состоит в том, чтобы сделать графический интерфейс для работы с бд.
>>215864002точнее как, поебень с правом на жизнь, на такой поебени видел более чем достаточно, но без необходимости не надо этим заниматься. будет у тебя человек в двух комиссиях, и что.
>>215861974 (OP)Короче, коль у тебя есть люди то запиливай модель "Физическое лицо", суть в том что студент может завтра стать преподом а препод студентом. А так у тебя будет одно ФЛ а дальше уже просто внешние ключи у модели препод, студент, небо, аллах.
>>215864243Т.е. сделать одну таблицу с людьми выделив общие свойства и создать таблицы наследники в лице студента, неба и аллаха?
>>215861974 (OP)а почему в студенте один проект? ты пока учишься у тебя до ебеней проектов. пусть их история по годам в project лежит, сделай связь с проектами m-n
>>215864243Но вопрос в другом:>препод (teacher) может быть и руководителем (curator) проекта, и проверяющим (comission_member). Как рациональнее всего сделать разделение учителей на кураторов и участников комиссии?
>>215864002Надо сделать таблицу ролей и связать с тичером многие ко многим. Когда тичер будет что-то делать, то проверять есть ли у него группа для этого действия.
>>215864779Кстати идея с моделью ФЛ показала себя на практике. Делал для школы бдшку и спустя пару лет один из учеников внезапно стал родителем и вот в таблице ФЛ одна запись и в связке ученик и родитель по одной.
>>215861974 (OP)еще можно про lifetime подумать, в каком порядке что появляется, что без чего может быть.есть студенты без проекта, есть проекты без студента, есть проекты без оценки. у оценки всё обязательное, проект без препода -хз. остальное вообще говоря тоже хз бывает по заданию или нет.
>>215865423>>215865452обычно такие вещи либо есть в тз, либо если его писать мудила, то надо уточнять у заказчика. опять же, обычно на практике это по барабану, но если нужна картинка с правильными стрелочками, то стрелочки должны быть правильные.
>>215865522Это же проект уровня студента 2го курса универа. У меня тз из темы и трёх пунктов-ограничений, ёпту. У нас преподы не особо-то и компетентны. Не у кого помощи спросить. Мой препод вообще предлагал ещё средний бал каждого проекта хранить в таблице. :/
>>215865753также стоит отметить, что у если студенты-проекты 1-1, то средний балл про проекту равен одной оценке за него.
>>215866181Член комиссии - это роль, как и куратор. Просто у меня к 1 проекту будет 3 записи от разных челов комиссии с оценкой.
>>215866287ну, у тебя получается что некие абстрактные члены комиссий прилетают из вакуума и оставляют оценки в журнале. обычно это не так работает. есть каферда, там есть преподы, из них собирается сборище на студентов от преподов этой же кафедры и они друг другу ставят оценки. видимо тебе ничего такого делать не надо, и хорошо.
>>215866582Вот, если интересно, задание: Тема: сдача студентами дипломных проектов.Объекты: студенты, группы, дипломные проекты, руководители, члены ГЭК.Для моделирования задачи необходимо хранить следующую информацию:ФИО студента№ группы№ зачетной книжкиТема дипломного проектаИтоговая оценка за дипломный проектФИО руководителя дипломного проектаОценки всех членов ГЭК за дипломный проект Дополнительные условия:один студент защищает только одну дипломную работу;каждую дипломную работу оценивает не менее 3 членов ГЭК;член ГЭК может одновременно быть руководителем дипломного проекта.
>>215866948>члены ГЭКвообще я бы 1. ввел некую ебань под названием коммисия, напихал в них преподов2. сделал штуку под названием "сдача проекта" и под эту сдачу насовал детьми оценки, от членов комиссии.и дальше эта схема должна коммутировать, в том плане что тебе оценку ставил чувак, который был в комиссии на сдаче