Да, это считается отношением «многие ко многим» в вашем сценарии. Например, рассмотрим базу данных, в которой есть пользователь и группа. Можно сказать, что у пользователя много групп, а у группы много пользователей. Это как перекрывающиеся отношения «один ко многим» с обеих сторон. Это на самом деле нетривиально для представления в реляционной базе данных, и это не может быть сделано путем простого добавления внешних ключей в существующие таблицы. Для этого вам потребуется дополнительная таблица, выступающая в роли промежуточного / вспомогательного, где хранится первичный ключ обеих таблиц.
Вот некоторая реализация, использующая Flask -Sqlalchemy
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:////tmp/test.db"
db = SQLAlchemy(app)
# act as auxiliary table for user and group table
user_groups = db.Table(
"user_groups",
db.Column("user_id", db.Integer, db.ForeignKey("user.id")),
db.Column("group_id", db.Integer, db.ForeignKey("group.id")),
)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120), unique=True, nullable=False)
groups = db.relationship("Group", secondary=user_groups, back_populates="users")
class Group(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120), nullable=False)
users = db.relationship("User", secondary=user_groups, back_populates="groups")
для получения дополнительной справки: https://docs.sqlalchemy.org/en/13/orm/basic_relationships.html Как построить отношения многие ко многим, используя SQLAlchemy: хороший пример