uml вопрос — обобщение

#mysql #database #database-design

#mysql #База данных #база данных-дизайн

Вопрос:

у меня есть сомнение. Представьте, что у меня есть три категории: студент, рабочий, студент /работница.

правильный :

            ProfissonalArea

    |           |                  |
    |           |                  |
student    worker/student        worker
  

или существует лучший способ сделать это? проблема в том, что у студента может быть работа.

Спасибо

Ответ №1:

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

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

Комментарии:

1. если я понимаю, то, что вы предлагаете в первую очередь, это удалить 3 категории и создать что-то вроде «formationProperties», в котором есть все поля трех категорий?

2. @user455318: С чем я в принципе не согласен, так это с student/worker случаем. Что, если вам нужно добавить студентов со стипендией? Или люди с более чем одной работой? Если это не домашнее задание, где вы знаете , что это все, решения, которые сводятся к перечислению всех комбинаций, склонны возвращаться и кусать вас.

3. @user455318: Если это просто категории, без связанных полей, то все, что вам нужно, — это многозначное поле, позволяющее пользователю быть как работником, так и студентом. Если это на самом деле классы объектов, вы должны использовать интерфейсы и наследование, чтобы WorkingStudent можно было использовать везде, где используются Worker или Student.

4. спасибо, вы помогли мне разобраться в проблеме. студент / рабочий не имеет смысла существовать, если его можно получить с атрибутами student worker. Спасибо