在数据库中建模继承的最佳实践是什么?
权衡取舍(例如可疑性)是什么?
(我对SQL Server和.NET最感兴趣,但我也想了解其他平台如何解决这个问题.)
以下用户历史记录表包含给定用户访问网站的每一天的一条记录(在24小时UTC时间段内).它有数千条记录,但每个用户每天只有一条记录.如果用户当天没有访问过该网站,则不会生成任何记录.
Id UserId CreationDate ------ ------ ------------ 750997 12 2009-07-07 18:42:20.723 750998 15 2009-07-07 18:42:20.927 751000 19 2009-07-07 18:42:22.283
我正在寻找的是这个表上的SQL查询具有良好的性能,它告诉我哪些用户组连续几天访问了网站而没有错过一天.
换句话说,有多少用户在此表中有(n)个记录,包括顺序(前一天或后一天)日期?如果序列中缺少任何一天,则序列被破坏并应在1处重新开始; 我们正在寻找在这里连续几天没有差距的用户.
此查询与特定Stack Overflow徽章之间的任何相似之处纯属巧合,当然.. :)
我正在尝试使用以下命令更改sql server中列的大小:
ALTER TABLE [dbo].[Address]
ALTER COLUMN [Addr1] [nvarchar](80) NULL
Run Code Online (Sandbox Code Playgroud)
Addr1最初的长度40.
它失败了,引发了这个错误:
The object 'Address_e' is dependent on column 'Addr1'.
ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access
this column.
Run Code Online (Sandbox Code Playgroud)
我试图阅读它,似乎因为一些视图引用此列,似乎SQL Server实际上试图删除引发错误的列.
Address_e 是由以前的数据库管理员创建的视图.
有没有其他方法可以改变列的大小?
SQL Server 2008是否具有类似MySQL的数据类型enum?
这是一个众所周知的问题,但我发现的最佳解决方案是:
SELECT TOP N *
FROM MyTable
ORDER BY Id DESC
Run Code Online (Sandbox Code Playgroud)
我有一张有很多行的桌子.使用该查询不是一种可能性,因为它需要花费大量时间.那么如何在不使用ORDER BY的情况下选择最后N行呢?
编辑
抱歉这个重复的问题
试图找到一些简单的SQL Server PIVOT示例.我发现的大多数例子都涉及计算或总结数字.我只想转动一些字符串数据.例如,我有一个返回以下内容的查询.
Action1 VIEW
Action1 EDIT
Action2 VIEW
Action3 VIEW
Action3 EDIT
Run Code Online (Sandbox Code Playgroud)
我想使用PIVOT(如果可能的话)来产生如下结果:
Action1 VIEW EDIT
Action2 VIEW NULL
Action3 VIEW EDIT
Run Code Online (Sandbox Code Playgroud)
PIVOT功能可以实现这一点吗?
我正在查看SQL Server 2008的AdventureWorks示例数据库,我在他们的创建脚本中看到他们倾向于使用以下内容:
ALTER TABLE [Production].[ProductCostHistory] WITH CHECK ADD
CONSTRAINT [FK_ProductCostHistory_Product_ProductID] FOREIGN KEY([ProductID])
REFERENCES [Production].[Product] ([ProductID])
GO
Run Code Online (Sandbox Code Playgroud)
紧接着是:
ALTER TABLE [Production].[ProductCostHistory] CHECK CONSTRAINT
[FK_ProductCostHistory_Product_ProductID]
GO
Run Code Online (Sandbox Code Playgroud)
我看到这个用于外键(如此处),唯一约束和常规CHECK约束; DEFAULT约束使用我更熟悉的常规格式,例如:
ALTER TABLE [Production].[ProductCostHistory] ADD CONSTRAINT
[DF_ProductCostHistory_ModifiedDate] DEFAULT (getdate()) FOR [ModifiedDate]
GO
Run Code Online (Sandbox Code Playgroud)
如果有的话,第一种方式与第二种方式之间有什么区别?
我的业务是制作非关键任务的网站和应用程序- 例如.银行软件,太空飞行,重症监护应用等.你明白了.
那么,有了这个庞大的免责声明,在一些Sql语句中使用NOLOCK提示是不是很糟糕?几年前,一位Sql管理员建议我应该使用NOLOCK,如果我对"脏读"感到满意,这会让我的系统性能提高一些,因为每次读取都没有锁定表/行/不管.
我还被告知,如果我遇到死锁,这是一个很好的解决方案.所以,我开始关注这个想法几年,直到一个Sql大师帮我一些随机代码并注意到我的sql代码中的所有NOLOCKS.我被礼貌地责骂,他试图向我解释(为什么这不是一件好事)而且我迷路了.我觉得他的解释的本质是'它是一个解决更严重问题的创可贴解决方案......特别是如果你遇到了死锁.因此,修复问题的根源.
我最近做了一些谷歌搜索,并发现了这篇文章.
那么,有些sql db guru sensei的请赐教吗?
我有一个奇怪的情况,我的SQL Server 2012数据库中的自动标识int列没有正确递增.
假设我有一个使用int自动标识作为主键的表,它偶尔会跳过增量,例如:
1,2,3,4,5,1004,1005
这是在随机数量的随机时间表上发生的,无法复制它以查找任何趋势.
这是怎么回事?有办法让它停止吗?
sql-server ×10
sql ×7
t-sql ×4
.net ×1
date ×1
identity ×1
inheritance ×1
named-pipes ×1
nolock ×1
oop ×1
performance ×1
pipe ×1
pivot ×1
types ×1