数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

4
如何使用PostgreSQL在每一行上保持唯一的计数器?
我需要在document_revisions表中保留一个唯一的(每行)修订号,该修订号的作用域是一个文档,因此它不是整个表唯一的,而仅是相关文档的唯一。 我最初想到的是: current_rev = SELECT MAX(rev) FROM document_revisions WHERE document_id = 123; INSERT INTO document_revisions(rev) VALUES(current_rev + 1); 但是有比赛条件! 我正在尝试使用来解决它pg_advisory_lock,但是文档有点稀缺,并且我不太了解它,我也不想错误地锁定某些东西。 以下内容是否可以接受,或者我做错了,还是有更好的解决方案? SELECT pg_advisory_lock(123); current_rev = SELECT MAX(rev) FROM document_revisions WHERE document_id = 123; INSERT INTO document_revisions(rev) VALUES(current_rev + 1); SELECT pg_advisory_unlock(123); 我是否应该为给定操作(key2)锁定文档行(key1)?因此,这将是正确的解决方案: SELECT pg_advisory_lock(id, 1) FROM documents WHERE id = …

2
转换度量单位
寻找一种最合适的计量单位清单,列出以不同(但兼容)单位体积给出的物质。 单位换算表 单位转换表存储各种单位以及这些单位之间的关系: id unit coefficient parent_id 36 "microlitre" 0.0000000010000000000000000 37 37 "millilitre" 0.0000010000000000000000000 5 5 "centilitre" 0.0000100000000000000000000 18 18 "decilitre" 0.0001000000000000000000000 34 34 "litre" 0.0010000000000000000000000 19 19 "dekalitre" 0.0100000000000000000000000 29 29 "hectolitre" 0.1000000000000000000000000 33 33 "kilolitre" 1.0000000000000000000000000 35 35 "megalitre" 1000.0000000000000000000000 0 按系数排序显示parent_id链接将子单元与其数字上级链接。 可以使用以下方法在PostgreSQL中创建该表: CREATE TABLE unit_conversion ( id …

1
存储记录元数据的最佳实践
在数据库中存储单个记录的元数据的最佳实践是什么? 我需要在数据库中存储常见的元数据,例如创建时间和最后更新时间。我找到了几种不同的解决方案: 将元数据直接存储在表中。 优点: 元数据直接链接到记录 无需联接即可检索元数据 缺点: 需要大量重复的列(除非使用继承) 元数据和业务数据不分开 使用创建通用元数据表,并使用软外键将数据链接到正确的表和记录。 优点: 没有重复的列 元数据与业务数据分开 缺点: 元数据和数据之间没有直接链接(不能使用FK) 加入需要附加条件 为每个需要元数据的表创建单独的元数据表。 优点: 元数据直接链接到记录 元数据与业务数据分开 缺点: 需要很多额外的表 需要大量重复的列(除非使用继承) 是否有比我在这里提到的更多的优缺点?存储此元数据的最佳实践是什么?


2
查看数据库图所需的权限
我最近设置了SSDT供我们的开发人员使用。通过限制每个开发人员连接到服务器(db_datareader,db_datawriter)时的权限,我们通过SSDT强制对开发数据库进行更改。在SSDT中,我们使用部署脚本将更改发布到数据库,该脚本使用具有提升权限的登录名进行连接。 我的问题。鉴于我们已经竭尽全力来锁定数据库(以防止模式漂移);开发人员是否可以通过任何方式查看此数据库上的图表而无需db_owner权限?我知道每个开发人员都可以创建和查看自己的图,但是我希望他们能够查看由许多不同的开发人员创建的所有图。 我认为这不会有所帮助,但我们正在运行sql server 2012 任何帮助都会得到很大的帮助。

3
两个可为空的列,其中一个必须具有值
不解释问题: 无论如何,是否有2个空值的约束总是需要1个有值?例如,两个日期列都为空,但至少有 1个需要具有一个值 问题描述: 假设我有一个名为Expense的表格 并有两个日期: prevision_expense_expiration_date DATE为空ABLEABLE_payment_date DATE为空 这两列的逻辑如下: 我买了东西,我知道我得为此花些钱,例如电话费。我将其作为费用输入,并带有expense_payment_date。该日期是我应该支付的假定日期,而不是实际的支付日期,例如发票的到期日期。 在其他情况下,我会出售某些提供者提供的服务的礼品卡。我可能有买我的提供商的服务转移到我的客户的费用只有当客户赎回卡。因此,礼品卡有一个有效期,我想对该“费用”做一个预先准备,而不插入礼品卡有效期内的费用,如果礼品卡过期,则“费用”不应输入到帐户中系统。 我知道我可以有2个相等的表,分别称为prevision_expense和Confirmed_expense,但是听起来不对,所以我在同一张表中有2个日期,可以为空,但是我想约束一下,以便始终需要一个。 还有另一种可行的策略: payment_date DATE NOT NULL is_prevision_date BOOL NOT NULL 因此,在这种情况下,如果日期为prevision,则bool值将为1,否则将为0。没有空值,一切都很好。除了我希望可以选择在第一次有预先设定日期时存储两个值,然后(然后说两天后说)确定该费用的日期时,在这种情况下,采用策略2时,我将没有该选项。 我在数据库设计中做错了什么吗?:D

2
如何将SSRS(SQL Server 2012)配置为在不同实例上运行,但与SharePoint在同一服务器上
我有一个运行Windows 2008R2的SQL Server 2012实例以及另一个运行SharePoint的SQL Server 2012实例(我认为这是SharePoint 2010)。 当我尝试访问时,http://localhost/Reports_<InstanceName>我得到: 证书警告(我会继续进行-我不太在乎-它是开发人员计算机) 以下文字: Cannot connect to the configuration database. Google表示该错误消息与SharePoint相关,因此我倾向于认为SharePoint正在劫持SSRS请求。 是否可以对SSRS或其他某些东西(可能是IIS?)进行配置,使我可以访问报表服务器? 注意:我可以通过SSMS连接到Reporting Services。

5
查询而无需指定表的架构
我从SQL Server 2000导入了一堆表到我的2008数据库。所有导入的表都以我的用户名作为前缀,例如:erpadmin.tablename。 在表属性中,它将“ erpadmin”列为数据库架构。当我编写查询时,我现在必须包含“ erpadmin”。在所有表名前面,这令人困惑。 当前结果: select * from erpadmin.tablename 所需结果: select * from tablename

3
可重复读中的不一致
http://www.postgresql.org/docs/9.2/static/transaction-iso.html 可重复读取模式提供了严格的保证,即每个事务都能看到数据库的完全稳定的视图。但是,此视图不一定总是与同一级别的并发事务的某些串行(一次一个)执行一致。例如,即使是该级别的只读事务,也可能会看到更新了控制记录以显示批次已完成,但是看不到逻辑上属于该批次的详细记录之一,因为它读取了控制记录的较早版本。 。如果不谨慎使用显式锁来阻止冲突的事务,则试图通过在此隔离级别运行的事务来强制执行业务规则的尝试将无法正常工作。 这不是幻像读取吗,在可重复读取模式下是不可能的? 该文档说,在可重复读取事务中的查询在事务开始时看到快照,那么查询怎么可能读取不一致的数据?



5
安装SQL Server RAID 10与RAID 5
我是设置SQL Server和Vms的新手。我的前任将Raid 5用于SQL安装所在的C驱动器,并将RAID 10用于数据库文件和数据库日志。 我想知道这是否正确,还是应该将RAID 5用于SQL数据库文件? 有什么帮助吗?

2
SQL Server插入后触发器
我希望married在对marital_status列上的文本进行插入后触发该触发器,这是我到目前为止的结果 ALTER TRIGGER [dbo].[marriage] ON [dbo].[applicant_personal_info] AFTER INSERT AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; IF (SELECT [marital_status] FROM inserted) = 'married' BEGIN INSERT INTO [dbo].[applicant_marriage_info]([dom]) VALUES('abc') END END

3
链接服务器风险
我正在实现一项新功能,该功能需要来自多台服务器上数据库的数据。我只需要合并所有这些服务器中的数据并对其进行排序。我想到的两个选择是: 使用链接的服务器并编写一个简单的查询,以对将在一台服务器上运行的数据进行合并和排序,并从另一台服务器收集数据。 使用应用程序从所有服务器收集数据,然后将其发送回SQL Server进行排序(不想在应用程序中实现排序)。 我们在SQL Server 2008 r2的活动/活动群集中运行服务器。所有数据库都具有相同的权限,如果您有权访问一个数据库/服务器,则对它们全部都具有权限。这是一个面向公众的应用程序(需要用户登录)。 使用链接服务器有哪些风险?我应该关注任何安全漏洞吗?在主动/主动群集中运行链接服务器是否有任何问题?与替代方案相比,会不会有任何重大的性能问题? 关于链接服务器,似乎普遍存在负面的“嗡嗡声”,但是我找不到任何具体的东西可以使我相信那里确实存在任何问题。


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.