小编Str*_*ped的帖子

有没有更好的方法来处理多级 ParentId 表结构?

我在一家出版商工作,我们的产品主要是书籍和期刊。它们最常见的结构如下:

Book > Chapter

Book Series > Book > Chapter

Book > Volume > Chapter

Book Series > Book > Volume > Chapter

Journal > Volume > Issue > Article

Journal > Volume > Article
Run Code Online (Sandbox Code Playgroud)

我们目前将所有这些记录与 Id 和 ParentId 列存储在同一个表中。例如,TitleId = 1 的书有 3 章将具有以下行:

Book: Id = 1, ParentId = 1
Chapter #1: Id = 2, ParentId = 1
Chapter #2: Id = 3, ParentId = 1
Chapter #3: Id = 4, ParentId = 1
Run Code Online (Sandbox Code Playgroud)

所有这些记录,无论是书籍、章节、期刊、文章等,都可以将它们的 Id 连接到其他表,以获取作者、价格、所有权等信息。

这种结构给我们带来的问题是嵌套在某些情况下会增加大量开销。例如,如果有人试图访问他们购买的期刊文章,我们需要运行多个查询来了解他们是否确实有权访问。我们有一个包含自有产品 …

performance database-design sql-server query-performance

6
推荐指数
2
解决办法
488
查看次数

添加列花费的时间太长

我正在尝试向数据库添加一列。查询已经运行了 25 分钟,它锁定了对该表的 Web 访问并破坏了我们的网站:

alter table MyTable
add MyNewColumn varchar(max) not null
default ('')
Run Code Online (Sandbox Code Playgroud)

该表在不同的列中包含二进制数据并且非常大。

使用红色的“取消执行查询”按钮取消会导致其他问题吗?我只是想弄清楚此时是否应该尝试取消查询,以及它运行了这么长时间后会发生什么。

sql-server-2008 sql-server

5
推荐指数
2
解决办法
6416
查看次数