哪个是MySql数据库的正确设计:列列表或另一个表?

时间:2017-02-12 02:20:22

标签: mysql sqlalchemy

我正在使用SQLAlchemy。基本上我会有一堆像这样的帖子。

class Post(Base):
    __tablename__ = "posts"

    post_id = Column(Integer, nullable=False, autoincrement=True, primary_key=True)
    user_id = Column(Integer, ForeignKey("users.user_id"), nullable=False) #author
    post_text = Column(VARCHAR(140), nullable=False)
    post_image = Column(VARCHAR(255))
    like = Column(Integer, nullable=False)
    datetime = Column(VARCHAR(255), nullable=False)

我想跟踪喜欢帖子的用户。我不知道是否应该在posts表中使用列列表,或者完全创建另一个表来保存喜欢的用户。请给出建议并保持简单,我对mysql很新。

1 个答案:

答案 0 :(得分:0)

class Like(Base):
    __tablename__ = 'likes'
    id = Column(Integer, primary_key=True)
    post_id = Column(Integer, ForeignKey("posts.user_id"))
    user_id = Column(Integer, ForeignKey("users.user_id"))

分别在Post和User类中添加以下likes列:

likes = sqlalchemy.orm.relationship('Like', backref='post')
likes = sqlalchemy.orm.relationship('Like', backref='user')

这两列描述了这些表之间的关系,backref将添加一个对你的Like类的引用,它将指向特定的用户和帖子。 用法示例:

user = session.query(User).get(1)
post = session.query(Post).get(1)
like = Like(user=user, post=post)
session.add(like)
session.commit()

假设您希望得到一个帖子的总喜欢:

post = session.query(Post).get(postid)
post.likes.count()