我有一个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)
在一座建筑物里,一个人可以有许多卡片,可以用来识别他们,并允许他们通过特定的大门。然而,这些卡也可以在其他建筑中使用
在建筑范围内,我希望确保:
所以我创建了一个唯一的约束:(building_id
,user_id
,gate
)
我应该做什么约束?我想到了building_id
,card_name
,gate
的唯一约束将解决这个问题,但它只是说,'这张卡在每个门上只能由一个用户使用'。在这种情况下,用户U在A门使用卡K,而用户V在B门使用卡K,仍然可以被删除
例如,我有一些记录(一个建筑范围):
唯一约束(building
,user_id
,gate
)已被简化,但名为card1-1
的卡属于2个用户
您的约束
(building_id, user_id, gate)
意味着给定用户的入口方法的唯一性。 口头上,它意味着“一个用户不能有一个以上的入口方式进入建筑物的大门”
或
“建筑物中的一个门不能有超过一种进入单个用户的方式”
由于您没有以任何方式处理卡的唯一性,因此不可能暗示
User1
将不会拥有与User2
相同的卡。但是,您的主要条件仍然满足-一个用户只能使用一张卡(无论您将在EntranceMethod
的card
字段中输入什么文本)来通过因为每个用户只有一个入口方法,所以给定的
User
、building_id
和gate
不会有重复的card
字段如果您想另外确保用户不会共享他们的卡进入,您可以引入
Card
模型,使用ForeignKey
到User
模型。这样,一个卡实例将只附加到一个User
但是,此方法意味着您必须在创建时验证
EntranceMethod
,另外还要检查card_id
是否是用户的卡之一相关问题 更多 >
编程相关推荐