Questions tagged «best-practices»

最佳实践通常和非正式地被认为是随着时间的推移显示出优于通过其他方式实现的方法和过程。

2
我可以无损地分解这张桌子吗?
我偶然发现了一个数据库设计问题,而这个数据库设计问题超出了我的能力范围,而我的DBA专家也开始进行防火训练。 本质上,我有一个带有以下主键的表(为简洁起见,PK): child_id integer parent_id integer date datetime child_id并且parent_id是实体表的外键。“子”表本身还包含“父”表的外键,并且lo child_id始终引用与parent_id上表所期望的相同的外键。实际上,事实证明,还有一些额外的代码可以使两者保持同步。 这使这位热情洋溢的标准化新手说:“我应该删除冗余!” 我分解为以下内容: Table_1 PK: child_id integer date datetime Table_2 PK: parent_id integer date datetime Table_3: (already exists) child_id integer PRIMARY KEY parent_id integer FOREIGN KEY 而且,当我自然地将这些人加入一起时,我将恢复原始表。据我了解,制造出了5NF。 但是,现在我意识到存在隐藏的业务规则。 通常,与给定日期关联的日期child_id必须是与对应日期关联的日期的子集parent_id。您可以看到第一个表强制执行此规则。 我的分解不会强制执行该规则,因为您可以自由地将其添加到表1中,直到日期变得太大为止。 这将我引向以下问题: 这是5NF分解吗?虽然我说它允许插入异常,但它似乎也遵循Wiki示例,该示例本身遵循本指南。短语(强调我)“我们可以从由三种不同的记录类型组成的规范化形式中重构所有真实事实”,这给了我一个特殊的停顿,因为无论我注入多少垃圾Table_1,自然连接仍然会忽略它。 假设我不喜欢这种分解(我不喜欢)。我自由地承认,实际的解决方案是保留表和代码不变。但是,从理论上讲,是否有一种方法可以分解和/或添加约束,以使我摆脱第一个表并保留我的业务规则?


5
过度使用/正确使用模式?
在问了Stackoverflow 这个问题之后,我想知道我在哪里做的是正确/最佳实践。 基本上,我创建的每个对象都将进入一个架构,该架构名称反映了用法。例如,我有模式Audit和Admin(以及其他模式)。 反过来,这也不会留下任何对象dbo。这个可以吗?还有什么我需要做的吗?

5
并行性最佳实践
一般而言,设置并行性的最佳做法是什么?我知道SQL Server默认0使用所有可用的处理器,但是您想在哪种情况下更改此默认行为? 我记得在某处(我必须去看这篇文章)读过一篇文章,对于OLTP工作负载,您应该关闭并行性(将maxdop设置为1)。我认为我不完全理解您为什么要这样做。 什么时候可以将maxdop保持为SQL Server(0)?什么时候关闭并行性(1)?您何时将maxdop明确声明给特定数量的处理器? 是什么导致并行性?

3
任何减少我在生产中的特权但不会使我的工作过分困难的指示
在Windows 2008 R2上运行SQL Server 2005和2008。 我们将减少对开发人员的生产特权- 我想自己做为DBA一样,限制生产权并在需要时提升权限。 我的主要目标将是消除愚蠢的错误- 由数据库管理员做,devopers将有最多的生产读访问。我们喜欢表现得像我们是超级英雄,不会犯错,但是一直没有生产权是有道理的,这是一些人推荐的最佳做法。 最好的方法是什么?在日常使用和安装过程中,最痛苦的是什么? 当前,我们有一个DBA Windows组,该组对我们所有的服务器和数据库都有权限。 我也会对降低OS /远程登录权限感兴趣-但我最关心数据库权限。 我猜想我们需要提升特权才能以sa身份运行跟踪,并且可能需要进行一些所有权清除,才能删除旧登录名的SA权利。我们可能还会遇到什么其他问题? 感谢您的建议并分享您的经验!

3
应该允许开发人员使用LocalDB还是“开发”实例?
就像之前在此处围绕“ 开发人员是否能够查询生产数据库? ” 这一问题的脉络一样,我想让您对另一个特别烦人的话题发表想法! 许多公司阻止开发人员在开发计算机上安装SQL Server Express等,而是促进使用集中式开发SQL Server。 具体而言,这样做是为了确保: 开发服务器和生产之间的补丁程序级别一致性 能够证明和验证上面的任何补丁 数据安全; 仅开发服务器上的数据用于开发 可恢复性;数据是可恢复的并且仍在备份 整理差异可能会在转移到生产中时引​​起问题 在我看来,所有这些论点都是特别无效的,也许是补丁的例外。但是,如果本地计算机上的数据库仅用于开发活动而不是测试,则当应用程序通过Test / UAT等进行生产时,将证明补丁是可行的。 排序规则似乎不是一个正当的理由,好像这是数据库的问题一样,无论如何在创建数据库时都应进行设置。据我所知,只有SharePoint和SCCM对此有问题;) 现在,假设它仅用于开发,并且数据库不会“移至”生产环境,唯一的移动是: 创建数据库的脚本正在生成以部署到生产环境 来自“生产”第三方系统的备份在适用于验证和开发的情况下被还原和截断 谁能看到任何问题吗?我想念什么吗? 我想最大的担忧之一是本地数据库实例过时的能力,但这就是软件管理问题,而不是DBA IMO。


2
预测审查的数据库设计
我试图学习更多有关关系数据库的知识,并且发现没有更好的方法来学习然后实际去做。我决定亲自尝试一下“个人预算会计和预测”。到目前为止,我已经进行了一些研究,并希望对当前的数据库设计和规范化有一些了解。 您对我当前的数据库设计有何想法和建议?我在下面提供了一些信息,以便更好地帮助您:) 披露:这是一个个人项目。不用于家庭作业或工作。 商业事实 银行ACCOUNT可以有很多ENTRIES An ENTRY可以是CREDIT或DEBIT 的ENTRY日期已计入贷方或借方 安ENTRY有一个PAYEE 一个ENTRY可以被关联到BUDGET CATEGORY A CREDIT的金额为ENTRY A CREDIT的说明ENTRY 一个CREDIT可以在未来计划 A的CREDIT频率和/或金额可能会重复出现 A DEBIT的金额为ENTRY A DEBIT的说明ENTRY 一个DEBIT可以在未来计划 A的DEBIT频率和/或金额可能会重复出现 A PAYEE有个名字 一个BUDGET有很多BUDGET CATEGORIES A BUDGET只能与一个日历月份关联 一个BUDGET CATEGORY可以包含许多ENTRIES A BUDGET CATEGORY有个名字 A BUDGET CATEGORY有BUDGET金额 A FORECAST有开始日期 A FORECAST有结束日期 A FORECAST有期初余额 一个FORECAST有很多FORECASTED DAYS 一个FORECAST有一个FORECASTED BUDGET A FORECASTED DAY有一个日期 …


2
在单独的数据库之间建立关系是不好的做法吗?
我正在与一个具有多个数据库的客户端一起工作。有多个master级别数据库,这些级别数据库具有从instance级别数据库(特定于应用程序的DB)返回的关系。从instance到的关系master是整数值,代表.NET中表的主键master。设置中的视图和存储过程以通过这些存储的键instances从中加载数据master。 显然,没有真正的参照完整性,但是这是一种不好的做法还是应该将数据驻留在instance数据库的只读表中?

3
使用SUM()两次不是最佳选择?
我知道我必须写SUM两次,如果我想在HAVING子句中使用它(否则要使用派生表): SELECT id, sum(hours) AS totalhours FROM mytable GROUP BY id HAVING sum(hours) > 50; 我现在的问题是,这是否不是最理想的。作为程序员,该查询看起来像数据库将两次计算总和。是这样,还是我应该依靠数据库引擎为我做的优化? 更新:对类似查询的解释: postgres=> explain select sum(counttodo) from orderline group by orderlineid having sum(counttodo) > 100; QUERY PLAN -------------------------------------------------------------------- HashAggregate (cost=1.31..1.54 rows=18 width=8) Filter: (sum(counttodo) > 100) -> Seq Scan on orderline (cost=0.00..1.18 rows=18 width=8) (3 …

4
数据库设计-具有共享标签的不同对象
我的背景更多是网络编程而不是数据库管理,所以如果我在这里使用错误的术语,请指正。我正在尝试找出为我要编写的应用程序设计数据库的最佳方法。 情况:我在一个表中有“报告”,在另一表中有“建议”。每个报告可以有许多建议。我还有一个单独的关键字表(用于实施标记)。但是,我只希望将一组关键字同时应用于“报告”和“建议”,以便搜索关键字可以将“报告”和“建议”作为结果。 这是我开始的结构: Reports ---------- ReportID ReportName Recommendations ---------- RecommendationID RecommendationName ReportID (foreign key) Keywords ---------- KeywordID KeywordName ObjectKeywords ---------- KeywordID (foreign key) ReportID (foreign key) RecommendationID (foreign key) 本能地,我觉得这不是最佳选择,应该让我的可标记对象继承自一个公共父对象,并对该注释父对象进行标记,这将给出以下结构: BaseObjects ---------- ObjectID (primary key) ObjectType Reports ---------- ObjectID_Report (foreign key) ReportName Recommendations ---------- ObjectID_Recommendation (foreign key) RecommendationName ObjectID_Report (foreign …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.