1

Я работаю с Ruby on Rails, но этот вопрос относится к дизайну модели приложений и баз данных в целом. Я хочу моделировать многих типов людей, таких как Пользователь (кто-то, кто может войти в систему), Employee и Customer. Каждый из них имеет общие атрибуты, такие как имя и адрес электронной почты, которые должны быть частью суперкласса Person. Каждый тип также имеет другие более конкретные атрибуты. Человек может быть одной или несколькими из этих ролей (кто-то может быть как работником, так и клиентом).Rails Модель персонажа с различными ролями в качестве подкласса

В коде соответствующая структура выглядит как отношение суперкласса/подкласса, но из перспективы нормализации базы данных должна быть таблица Customer, которая ссылается на таблицу Person для ее общих атрибутов.

Мне нужно решить, как объединить эти два подхода.

Например, я хочу, чтобы иметь возможность создать клиента по Customer.create(name: “Johnny Appleseed”, favorite_product: widget) и запросить Employee.where(email: “[email protected]”) и избежать дублирования полей Person в каждой модели подкачки. Таким образом, я могу изменить способ моделирования Person, не требуя обновления всех других таблиц с теми же изменениями.

+0

Может ли пользователь быть тем же лицом, что и Клиент и Сотрудник? Я думаю, что вы действительно пытаетесь создать один стол, чтобы сказать, кем является сотрудник, клиент или и то, и другое. –

+0

Вы думаете, что «Роль» <'Человек', когда вы говорите:« Соответствующая структура выглядит как отношение суперкласса/подкласса »? – jvillian

ответ