我正在尝试在mysql中实现一个收藏夹表,允许用户通过id号将餐馆对象添加到表中。以下是基本概要: 有些客户包含唯一ID和其他内容。然后有些餐厅包含一个独特的ID和其他东西。我希望顾客能够拥有最爱。我制作了一个有客户ID的收藏夹表 - 这是我查找客户收藏夹的方式 - 但后来我必须硬编码一定数量的列,我可以存储独特的餐厅ID#s英寸
将列动态添加到收藏夹数据库是否有意义?
答案 0 :(得分:1)
没有。这是一个多对多的关系,实现这一点的通常方法是通过这样的连接表:
users
+----+------+
| id | name |
+----+------+
| 1 | John |
| 2 | Jill |
+----+------+
restaurants
+----+------------+
| id | name |
+----+------------+
| 1 | McDonald's |
| 2 | Subway |
| 3 | Chipotle |
+----+------------+
favorites
+---------+---------------+
| user_id | restaurant_id |
+---------+---------------+
| 1 | 2 |
| 1 | 3 |
| 2 | 3 |
+---------+---------------+
favorites
表格中的每一行都是"用户收藏的餐厅"关系。在这种情况下,没有人喜欢麦当劳,约翰已经偏爱地铁,约翰和吉尔都喜欢Chipotle。
SQLAlchemy对此模式有很好的支持:
class Favorite(Base):
__tablename__ = "favorites"
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
restaurant_id = Column(Integer, ForeignKey("restaurants.id"), primary_key=True)
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
...
favorites = relationship("Restaurant", secondary=Favorite.__table__)
class Restaurant(Base):
__tablename__ = "restaurants"
id = Column(Integer, primary_key=True)
...