【发布时间】:2016-04-02 08:32:50
【问题描述】:
我对 Microsoft 堆栈中的编码相对较新,我在新工作场所的一些做法与我以前见过的不同。即,我见过一种做法,其中只读表(应用程序不能插入/编辑/删除的表)以“lkp.EmailType”、“lkp.Gender”、“lkp.Prefix”为前缀"等等。
但是,当我开始使用 Entity Framework 和 Database-First 方法开发一些 MVC5 应用程序时 - 在调试我的代码时,我注意到它尝试将表名复数并更改架构 - 所以“lkp.Gender”查询出现关于“dbo.Genders”的选择语句。在研究了复数功能之后,似乎最佳实践倾向于表名复数,所以我继续为这个应用程序做了这个(这是一个新应用程序,但我们使用与以前的数据库结构类似的数据库结构,但不必保留一样)。
我需要做的最后一件事是将这些表模式更改为“dbo”而不是“lkp”。在与其他项目的一些同事交谈时,他们发现虽然只读查找表可能在他们的项目中使用 DBO 模式,但他们可能会以不同的方式命名它,例如“dbo.LkpGenders”等。
这需要一些工作来消除使用这些 LKP 表等对其他表的限制,我想在我为这个改变付出太多努力之前询问社区,这是否是一个好主意,并花时间要么使 LKP 表工作或取消它们。
简而言之 - 将 LKP 模式用于只读表是一种古老的做法,还是这仍然是一个好主意,而我只是在其他工作场所和项目中“错误”地做这件事?作为一个额外的好处,为什么 MVC5/EF 可能会在创建 EDMX 罚款的东西上使用 DBO 模式的原因很高兴知道。我应该为这种只读查找数据使用命名约定、数据库视图还是 LKP 模式?
【问题讨论】:
-
改变了我的搜索,我确实找到了一些关于这个主题的讨论——尽管我仍然想听听其他专家关于这个主题的意见。 sqlservercentral.com/Forums/Topic1664238-373-1.aspx 看来这里的共识是“它解决了什么问题?”有一个 LKP 模式,并且只是取消这种做法。
-
我目前不使用此约定,但认为它可能非常有用。我通常在 SSDT 和源代码控制的部署后脚本中查找数据。使用此约定并在内部公开它可以非常清楚地表明不应在表本身中手动编辑数据,以避免在下次发布时覆盖更改。
-
一组只读表将具有与一组更新表不同的备份和重组计划(或没有备份或重组计划)。这就是将只读表放在单独的架构/数据库中的原因之一。
-
这里有两个问题:从 DB 角度来看的最佳实践,以及从 EF 角度来看的最佳实践。从数据库方面来看,这 是 可能是最佳实践,但 EF 将无法利用这样的表,所以什么是最佳实践和不是最佳实践变得没有实际意义。但是,有一些方法可以让 EF 将实体视为只读,即使它没有在数据库级别强制执行:stackoverflow.com/questions/10437058/…
标签: sql-server database entity-framework database-design asp.net-mvc-5