преобразовать обобщение в схему mysql

#mysql #database #database-design #uml

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

Вопрос:

я нарисовал эту схему компоновки, но теперь мне нужно преобразовать для « mysql макета». Таким образом, generalization должны использоваться два junction tables , правильно? (один для студента, а другой для работника)

По поводу multiplicity , пользователи могут быть рабочими или студентами, но один пользователь может быть только одним работником, и только один работник может быть пользователем? это не имеет особого смысла …?

в принципе, как я могу преобразовать это generalization для чего-то, что может быть исполняемым для mysql кода.

Спасибо

введите описание изображения здесь

Ответ №1:

Есть 3 способа, которыми ORM делает это

Первый способ — предоставить каждой из них отдельную таблицу и объединить таблицы. (3 таблицы)

Второй способ работает, только если ваш класс users является абстрактным, тогда вы берете 2 таблицы для своих подклассов.

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

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

1. @последнее предложение -но содержимое таблицы users предназначено для каждого пользователя, специфическое содержимое, а данные в таблице worker могут быть общими для разных пользователей — два дизайнера, Боб и Джон, могут получать одинаковую зарплату. вот почему я создал три таблицы в схеме.

2. Что, если Боб получил повышение, а Джон нет? В этом случае проблему следует решать не с помощью обобщения, а с помощью отношения, подобного предложенному Тедом Хоппом

Ответ №2:

Один из способов справиться с этим — определить три таблицы: users, workers и students. Каждая таблица workers и students имеет поле user_id, которое является внешним ключом, привязанным к тому же полю в таблице users.