Мне сложно смоделировать эти отношения.
Есть продукты, каждый из которых принадлежит к 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()
Большое спасибо за советы и рекомендации!