SQLAlchemy中数据库名称和模式名称之间的区别?

时间:2014-10-31 18:59:35

标签: sql sqlalchemy

连接到数据库中的特定表时,我可能会提供以下信息

Database: protocol://user:pass@host:port/dbname
Table:    myschema.mytable

dbnamemyschema之间有什么区别?它们的使用对我来说似乎是多余的。

2 个答案:

答案 0 :(得分:7)

模式是一组数据库对象(表,视图等)within数据库。它是一种逻辑分区数据库中对象的方法。

假设用户具有适当的权限,他们可以使用一个数据库连接访问多个模式中的表。连接表(甚至来自多个模式)也是微不足道的。

当对象存储在多个数据库中时,每个数据库都需要连接才能访问这些对象,并且连接通常更加困难(您的RDBMS或ORM可能会隐藏其中的一些困难)。每个数据库也都有单独的登录。

答案 1 :(得分:1)

经过多一点阅读后,我相信模式只是方法或分区数据库。这对于管理权限和为类似命名的表提供唯一性都很有用。因此可以收集一组表,视图,触发器,进入模式并在那里设置权限。然后,我可以为该架构设置perms并将其交给用户。

此外,我还可以重载表名,但通过模式提供唯一性。我相信这种情况更常发生在事务数据库中,用户可能拥有类似命名的表,但每个用户的模式不同。