【发布时间】:2021-04-29 04:09:15
【问题描述】:
我有一个 MySQL 表,用于管理由以下模型描述的城市中的建筑物入口方法:
class EntranceMethod(db.Model):
id = Column(String, primary_key=True)
building_id = ForeignKey('building.id', nullable=False)
user_id = ForeignKey('user.id', nullable=False)
card_name = Column(String, nullable=False)
gate = Column(Enum('A', 'B', 'C'), nullable=False)
在一座建筑物中,一个人可以有很多张卡片,这些卡片可以用来识别他们并允许他们通过某些大门。但是,这些卡也可以用于其他建筑物。
在建筑范围内,我想确保:
- 使用特定门,用户不能使用超过 1 张卡进入。 (他们可以通过这张卡进入其他大门的建筑物,但不能在该大门使用另一张卡)。
所以我创建了一个独特的约束:(building_id, user_id, gate)
- 一张卡只属于一位用户。
我应该做什么样的限制?我想到了building_id、card_name、gate 的唯一约束将解决问题,但它只是说,'这张卡只能由一个用户在每个门上使用' .情况下,用户U在A门使用卡K,用户V在B门使用卡K,还是可以的。
例如,我有一些记录(一个建筑范围):
| user_id | card_name | gate |
|---|---|---|
| user1 | card1-1 | A |
| user1 | card1-2 | B |
| user2 | card2-1 | C |
| user2 | card1-1 | B |
唯一约束(building、user_id、gate)已满足,但名为 card1-1 的卡属于 2 个用户。
【问题讨论】:
-
(building_id, user_id, gate) 上的唯一约束如何无法达到预期的结果?请edit 您的问题包括minimal reproducible example 与样本数据和结果。
-
@GordThompson 这个独特的约束使我的表满足第一个条件,但不是第二个条件。
标签: python mysql flask-sqlalchemy