2016-04-28 3 views
0

У меня есть абстрактный класс «Человек», который унаследован (не абстрактный) класс «Кандидат», у последнего есть несколько подклассов: сохраненный кандидат (для интервью), признал кандидата ... Как я могу представить это в базе данных, пожалуйста?
СпасибоКак представить классы с иерархическим наследованием в базе данных отношений

+0

Это неправильное использование наследования. Человек может играть роль кандидата, но не всегда был и всегда будет кандидатом. Используйте композицию. Человек играет много ролей, один из которых может быть кандидатом. И их статус тоже не должен быть подтипом. Используйте столбец «status» для этого –

+0

Спасибо за ваш ответ, что вы имеете в виду по составу, пожалуйста, – hereForLearing

+0

Я имею в виду не использовать наследование :) Вы бы хотели, чтобы one2many отношения между Person и PersonRoles –

ответ

0

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

+0

Я бы сделал это, если бы был только один иерархический уровень (т. Е. Если бы были только допустимые и сохраненные кандидаты, наследуемые от Person), но теперь у меня есть два иерархических уровня, которые я не знаю, как это сделать – hereForLearing

1

Это неправильное использование наследования. Человек может играть роль кандидата, но не всегда был и всегда будет кандидатом. Используйте композицию. Человек играет много ролей, один из которых может быть кандидатом. Впоследствии они могли стать сотрудником. И их статус тоже не должен быть подтипом. Для этого используйте столбец «status».

Что-то вроде этого:

create table people (
    person_id int primary key, 
    name text, 
    ... 
); 

create table person_roles (
    person_id int references people(person_id), 
    type text check (type in ('Candidate', '...')), 
    candidate_status text check (candidate_status in ('Retained','Admitted')), 

    primary key (person_id, type) 
); 

Правильное использование наследования будет Person расширяет AbstractLegalParty. Организация или компания также расширят AbstractLegalParty.

+0

Почему вы включили введите первичный ключ? и, кстати, вы правы в этом примере. Я привел только пример, на моей диаграмме классов UML у меня есть следующая структура: Person (абстрактный класс), унаследованный Кандидатом, Персоналом и Администратором, и кандидат имеет два подкласса: признанный и сохраненный кандидат, это правильно? – hereForLearing

+0

@saywow, который позволяет человеку иметь несколько ролей, но только одну роль данного типа –

+0

, поэтому я буду представлять в своем UML Лицо (абстрактный класс), унаследованное Кандидатом, Персоналом и Администратором, и кандидат наследуется: допущенными и и когда я хочу представить, что в базе данных я буду делать, как вы сказали, правильно ли? что не будет выглядеть, если человек, член, кандидат ... имеют все тот же иерархический уровень? – hereForLearing

Смежные вопросы