#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.