目前我有这样的表:Pages, Groups, GroupPage, Users, UserGroup
. 使用腌制集,我只需 3 个表即可实现相同的功能:Pages, Groups, Users
.
set
似乎是实现 ACL 的自然选择,因为组和权限相关的操作可以用集合非常自然地表达。如果我将允许/拒绝列表存储为腌制集,它可以消除一些用于多对多关系的中间表,并允许在没有很多数据库操作的情况下进行权限编辑。
如果人类可读性很重要,我总是可以使用 json 而不是 cPickle 进行序列化,并set
在 Python 中操作权限列表时使用。使用 SQL 直接编辑权限的可能性很小。那么这是一个好的设计理念吗?
我们使用 SQLAlchemy 作为 ORM,所以它很可能用PickleType
column 来实现。我不打算存储整个腌制的“资源”记录集,只存储set
由“资源”主键值组成的对象。