AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 43457
Accepted
spaghettidba
spaghettidba
Asked: 2013-05-31 08:48:06 +0800 CST2013-05-31 08:48:06 +0800 CST 2013-05-31 08:48:06 +0800 CST

PK 为 ROWGUIDCOL 还是使用单独的 rowguid 列?

  • 772

这里正在进行一场冗长的辩论,所以我想听听其他意见。

我有许多带有 uniqueidentifier 聚集 PK 的表。这是否是一个好主意超出了这里的范围(而且它不会很快改变)。

现在,数据库必须合并发布,DEV 提倡使用单独的 rowguid 列,而不是将现有的 PK 标记为 ROWGUIDCOL。

基本上,他们说应用程序永远不应该将仅用于复制的东西带入其域(对他们来说,这只是“DBA 的东西”)。

从性能的角度来看,我认为没有理由添加一个新列来做我可以用现有列做的事情。而且,既然只是“DBA的东西”,为什么不让DBA来选择呢?

我有点理解开发者的观点,但我仍然不同意。

想法?

编辑:我只想补充一点,我在这场辩论中属于少数派,质疑我立场的开发者是我尊重和信任的人。这就是我求助于征求意见的原因。
我也可能遗漏了一些东西,并且可能误解了他们的观点。

sql-server database-design
  • 3 3 个回答
  • 3622 Views

3 个回答

  • Voted
  1. Best Answer
    Jon Seigel
    2013-05-31T10:10:09+08:002013-05-31T10:10:09+08:00

    基本上,他们说应用程序永远不应该将仅用于复制的东西带入其域(对他们来说,这只是“DBA 的东西”)。

    我完全同意。但是......主键不仅用于复制(可能应用程序以某种方式使用它)。在这种情况下,这个论点毫无意义。

    无论如何,据我所知,这种“DBA 的东西”只有两种方式可以跨越域边界:

    1. 如果应用程序正在使用引用该ROWGUIDCOL列的查询,如下所示:

      DECLARE @a table (id uniqueidentifier ROWGUIDCOL);
      
      SELECT ROWGUIDCOL FROM @a;
      

      我假设您的所有列都没有这个属性,所以应用程序不会这样做。(顺便说一下,ROWGUIDCOL这是一个与复制完全不同的概念。恰好合并复制使用它。)

    2. 主键列将不再可更新。如果应用程序正在执行此操作并且不会进行更改以使用其他算法,则别无选择,只能在表中添加一个新列,因此无需讨论。

    除了这些行为之外,该ROWGUIDCOL属性是完全透明的。您可以添加它,而应用程序永远不会知道。任何类型的数据复制方案都应该对应用程序尽可能透明。

    • 7
  2. Robert L Davis
    2013-05-31T09:24:32+08:002013-05-31T09:24:32+08:00

    我同意。只要 PK 值不需要改变,那么最好使用现有的 uniqueidentifier 列作为 rowguidcol。

    • 6
  3. Robert Zeurunkl
    2013-05-31T10:07:32+08:002013-05-31T10:07:32+08:00

    “基本上,他们说应用程序永远不应该将仅用于复制的东西带入其域(对于他们来说,这只是“DBA 的东西”)。”

    但它不仅仅用于复制。这也是(并且已经)是你的 PK。

    • 5

相关问题

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 在数据仓库中实现多对多关系有哪些方法?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve