Смоделируйте многие ко многим более трех таблиц в SQLAlchemy - PullRequest
0 голосов
/ 10 ноября 2018

Мне сложно смоделировать эти отношения.

Есть продукты, каждый из которых принадлежит к product_type. Типы продуктов имеют список различных функций, например. цвет, размер, вес, объем, отношение многих ко многим. В свою очередь, у каждого объекта есть свои особенности. красный, синий, зеленый, черный для цветов. Наконец, у продуктов есть некоторые из feature_options. Одним из примеров должен быть продукт BIC2006, у которого есть ручка product_type, характеристики которого - цвет и вес, и который имеет в этих функциях feature_options красный и синий для цвета и 1g и 2g для веса.

В конце я хотел бы сохранить feature_options по продуктам и запросить по продуктам список feature_options по функциям:

BIC2006 - Ручка

Цвет: красный, синий

Вес: 1 г, 2 г

Какая модель БД должна быть наилучшей для использования с SQLAlchemy?

На данный момент, поскольку мне нужно хранить feature_options по продуктам, которые я пробовал с этим, но я не уверен, как получить сортировку по функциям:

class ProductTypes_Features(Base):
    __tablename__ = 'product_types_features'
    product_type_id = Column(Integer, ForeignKey('product_types.id'), primary_key=True)
    feature_id = Column(Integer, ForeignKey('features.id'), primary_key=True)

class Feature_FeatureOptions(Base):
    __tablename__ = 'feature_feature_options'
    feature_id = Column(Integer, ForeignKey('features.id'), primary_key=True)
    feature_options_id = Column(Integer, ForeignKey('feature_options.id'), primary_key=True)

class Product_FeatureOptions(Base):
    __tablename__ = 'product_feature_options'
    product_id = Column(Integer, ForeignKey('products.id'), primary_key=True)
    feature_options_id = Column(Integer, ForeignKey('feature_options.id'), primary_key=True)
    feature_id = Column(Integer, ForeignKey('features.id'))   #??

class Products(Base):
    __tablename__ = 'product'
    id = Column(Integer, primary_key=True)
    product_type_id = Column(Integer, ForeignKey('product_types.id'))
    feature_options = relationship("Product_FeatureOptions")

class FeatureOptions(Base):
    __tablename__ = 'feature_options'
    id = Column(Integer, primary_key=True)

class Features(Base):
    __tablename__ = 'features'
    id = Column(Integer, primary_key=True)
    feature_options = relationship("Feature_FeatureOptions")

class ProductTypes(Base):
    __tablename__ = 'product_types'
    id = Column(Integer, primary_key=True)
    features = relationship("ProductType_Features")

Как я могу сделать запрос?

session.query(Products.id, 
    Products.feature_options.feature_id,
    Products.feature_options.feature_option_id).
    order_by(...).all()

Большое спасибо за советы и рекомендации!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...