这是一个通用的数据库设计问题 - 在数据库开发中,使用同义词相对于简单视图的好处是什么?在选择两者之间时应该考虑哪些主要因素?
一个示例视图:
CREATE VIEW Users AS
SELECT * FROM IdentitySystem.dbo.Users
并且等价的同义词:
CREATE SYNONYM Users
FOR IdentitySystem.dbo.LCTs
这是一个通用的数据库设计问题 - 在数据库开发中,使用同义词相对于简单视图的好处是什么?在选择两者之间时应该考虑哪些主要因素?
一个示例视图:
CREATE VIEW Users AS
SELECT * FROM IdentitySystem.dbo.Users
并且等价的同义词:
CREATE SYNONYM Users
FOR IdentitySystem.dbo.LCTs
有许多考虑因素,简而言之,对于每种情况都使用最适合的工具。
通过视图,我可以:
通过同义词,我可以:
可能还有更多可以通过同义词实现的功能。在我们(Oracle数据库)应用程序的设计中,我们为所有数据库对象(表、视图、触发器等)使用一个“owner”模式(用户),并将这些对象的权限授予其他“app”用户。在每个“app”用户模式中,我们创建同义词来引用“owner”对象。
希望对您有所帮助。
我使用同义词来分享其他数据库中的对象,这样当我使用 .Net Entity Framework 时,我可以使用一个 ObjectContext 来访问许多数据库中所需的所有数据。
视图主要是一个简单/复杂的“select”语句。本质上,您使用视图作为掩码,并仅显示那些有用的列值。您使用视图的目的是不向最终用户显示额外的信息。
而同义词是数据库对象的替代名称。
如果我错了,请纠正我,但我认为我在另一个同义词的用途上看到了一种方法(至少在Progress OpenEdge中),这是我没有在任何地方记录的,可以使它比视图更安全。 DML SELECT语句语法允许您使用表格、视图或同义词,但INSERT、UPDATE和DELETE语句仅允许使用表格或视图。某些视图如果符合特定条件,则提供对数据的可更新、可插入和可删除访问。同义词似乎是提供只读访问数据的好方法,而无需干扰授予(或拒绝)视图权限。
我们最近移动了一些表并用同义词替换了它们。然后我们发现:
在这些情况下,我们不得不改用视图。对于其他所有内容,我们仍然更喜欢同义词的简单性。
hibernate.hbm2ddl.auto=validate
开启模式验证时,它会导致Hibernate出现问题。关于使用同义词的原因,您提到的前两个理由肯定可以通过视图来解决,不是吗? - DarthPablocreate view X_table as select * from another_database.dbo.X_table
)。至于第三个原因——99%的情况下可能没有任何惩罚。那么神秘的...Plus many more.
是什么?它们重要吗?@Jimmy Zimms 给出了一个好答案。 - Konstantin