Проверяет понимание того, как ORM сопоставляет модели с таблицами базы данных, и знание исключений, таких как наследование и абстрактные модели.
В объектно-реляционном отображении (ORM) модель обычно представляет собой класс, который сопоставляется с таблицей в базе данных. По умолчанию каждая модель создает отдельную таблицу, где поля модели становятся столбцами, а экземпляры — строками. Однако это правило не является абсолютным.
class BaseModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
class Product(BaseModel):
name = models.CharField(max_length=100)BaseModel не имеет таблицы, а Product создает таблицу с полями name и created_at.Рассмотрим SQLAlchemy с наследованием:
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
Base = declarative_base()
class Employee(Base):
__tablename__ = 'employee'
id = Column(Integer, primary_key=True)
name = Column(String)
type = Column(String)
__mapper_args__ = {'polymorphic_on': type}
class Manager(Employee):
__tablename__ = 'manager'
id = Column(Integer, ForeignKey('employee.id'), primary_key=True)
department = Column(String)
__mapper_args__ = {'polymorphic_identity': 'manager'}Здесь Employee и Manager используют две таблицы, но связаны через внешний ключ. Это не одна таблица на модель, а гибридный подход.
Понимание того, что модель не всегда равна таблице, важно для проектирования эффективной схемы БД, особенно при наследовании или использовании абстракций. Это позволяет избежать избыточности и улучшить производительность.