> Как хранить книги и авторов в базе данных при связи многие-ко-многим (Python)
Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы
Компании: EXCORP
Стек: Python
> Пример ответа
Для связи "многие-ко-многим" между книгами и авторами в реляционной базе данных (например, PostgreSQL или SQLite) используется промежуточная таблица (ассоциативная). В Python с ORM SQLAlchemy это выглядит так:
PYTHONfrom sqlalchemy import create_engine, Column, Integer, String, Table, ForeignKeyfrom sqlalchemy.orm import relationship, declarative_baseBase = declarative_base()# Промежуточная таблицаbook_author = Table('book_author',Base.metadata,Column('book_id', Integer, ForeignKey('books.id'), primary_key=True),Column('author_id', Integer, ForeignKey('authors.id'), primary_key=True))class Book(Base):__tablename__ = 'books'id = Column(Integer, primary_key=True)title = Column(String, nullable=False)authors = relationship('Author', secondary=book_author, back_populates='books')class Author(Base):__tablename__ = 'authors'id = Column(Integer, primary_key=True)name = Column(String, nullable=False)books = relationship('Book', secondary=book_author, back_populates='authors')
Ключевые моменты:
- Промежуточная таблица
book_authorсодержит два внешних ключа, образующих составной первичный ключ. - В моделях
BookиAuthorиспользуетсяrelationshipс параметромsecondary=book_author. back_populatesобеспечивает двустороннюю связь.
Пример использования:
PYTHONbook = Book(title='Война и мир')author = Author(name='Лев Толстой')book.authors.append(author)session.add(book)session.commit()
Такой подход гарантирует нормализацию данных и позволяет легко запрашивать, например, всех авторов книги или все книги автора.
> Похожие задачи по Python
Как делать выборку связанных данных в чистом SQL
Какие метрики и процессы оценки успеха разработчика используются
Как оцениваются задачи в Agile
> Похожие задачи по backend
Что такое дженерики в TypeScript и для чего они используются
Как делать выборку связанных данных в чистом SQL
Какие метрики и процессы оценки успеха разработчика используются
Как оцениваются задачи в Agile
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью