Основно има три възможности за превеждане на обобщението в модел на база данни
1. Една таблица за всеки клас бетон
Създайте таблици Admin
, Teacher
и Student
. Всяка от тези таблици съдържа колони за всички атрибути и отношения на User
- За
- Всички полета на конкретен подклас са в една и съща таблица, така че не е необходимо присъединяване, за да получите всички данни за ученици
- Ограничения за лесно валидиране на данни (като задължителни полета за
Student
)
- Кон
- Всички полета на
User
се дублират във всяка таблица на подклас - Външни ключове към
User
трябва да бъдат разделени на три FK полета. Един заAdmin
, един заTeacher
и един заStudent
.
- Всички полета на
2. На масата за целия комплект за обобщение
В този случай имате само едно извикване на таблица User
който съдържа всички полета на User
+ всички полета на всички подкласове на User
- За
- Всички полета са в една и съща таблица, така че не е необходимо присъединяване, за да получите всички
User
данни - Без разделяне на FK на
User
- Всички полета са в една и съща таблица, така че не е необходимо присъединяване, за да получите всички
- Кон
- Има куп полета, които никога не се използват. Всички полета са специфични за
Student
иTeacher
никога не се попълват заAdmins
и обратно - Потвърждение на данни като задължителни полета за конкретен клас като
Student
става доста сложно, тъй като вече не е простоNot Null
ограничение.
- Има куп полета, които никога не се използват. Всички полета са специфични за
3. Една таблица за конкретен клас и една за суперклас
В този случай създавате таблици за всеки от конкретните подкласове и създавате таблица за класа User
. Всяка от конкретните таблици на подклас има задължителен FK към User
- За
- Най-нормализирана схема:Без повтарящи се полета за атрибутите на потребителя и без неизползвани полета.
- Без разделяне на FK на
User
- Ограничения за лесно валидиране на данни (като задължителни полета за
Student
)
- Кон
- Трябва да направите заявка за две таблици, ако искате всички данни на
Student
- Комплексни правила за проверка, за да сте сигурни, че всеки
User
записът има точно единAdmin
,Teacher
илиStudent
запис.
- Трябва да направите заявка за две таблици, ако искате всички данни на
Коя от тези опции ще изберете зависи от редица неща като броя на подкласовете, броя на атрибутите в подклас или суперклас, броя на FK към суперкласа и вероятно няколко други неща, които не съм помислете.