Лучший ассоциативный подход для подключения модели датчика к другим

Я пытаюсь реализовать следующее с помощью Flask + SQLAlchemy: у меня есть две модели базы данных, содержащие информацию о пчелиных пасеках и пчелиных ульях. Я хотел бы добавить функцию, чтобы как-то подключить их обоих к модели датчика. Они могут быть прикреплены к одной из пасек или одному из ульев. Вот что у меня есть.

class Apiary(db.Model):
    __tablename__ = 'apiary'
    # ... fields ...
    beehives = db.relationship("BeeHive", backref=db.backref('apiary', lazy='dynamic'), lazy='dynamic')


class BeeHive(db.Model)
    __tablename__ = 'beehive'
    # ... fields ...
    apiary_id = db.Column(db.Integer(), db.ForeignKey('apiary.id'))


class SensorType(db.Model):

    __tablename__ = 'sensor_type'

    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.Unicode(32), unique=True)
    sensors = db.relationship('Sensor', backref=db.backref('sensor_type', lazy='dynamic'), lazy='dynamic')


class Sensor(db.Model):

    __tablename__ = 'sensor'

    id = db.Column(db.Integer(), primary_key=True)
    serial = db.Column(UUID(), unique=True)
    sensor_type_id = db.Column(db.Integer(), db.ForeignKey('sensor_type.id'))
    readings = db.relationship('SensorReading', backref=db.backref('sensor', lazy='dynamic'), lazy='dynamic')


class SensorReading(db.Model):

    __tablename__ = 'sensor_reading'

    id = db.Column(db.BigInteger(), primary_key=True)
    value = # TODO
    timestamp = db.Column(db.DateTime(), default=db.func.now())

Я просматривал Интернет, читал документацию по SQLAlchemy и нашел кое-что о «полиморфной загрузке». У меня хорошее чувство, что это, вероятно, то, что я искал, но не знаю, как реализовать это в моем случае. Я видел подобные вещи в «мире Джанго», и они называют это «GenericForeignKey».

ОБНОВЛЕНИЕ: я нашел SQLAlchemyПримеры об этом типе ассоциации. Кто-нибудь может посоветовать мне, какой из них будет оптимальным подходом? criminator_on_related, generic_fk, table_per_association или table_per_related? Что из этого будет наименее головной болью в дальнейшем расширении приложения? Каскадное удаление?

Ответы на вопрос(1)

Ваш ответ на вопрос