问题标签 [primary-key]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database-design - 如果要进行复制,为什么 GUID 是 PK 的最佳选择?
我正在构建一个带有 Oracle 后端的 Intranet Web 应用程序。出于对本讨论不重要的原因,Oracle DB 将被复制到另一台服务器上。我有理由确定我们将使用 Oracle Basic Replication,而不是 Advanced。
有人可以向我解释为什么围绕主键的大多数讨论都类似于:
- 在 99% 的情况下,对 PK 使用自动递增的整数就可以了
- 除非您正在进行复制。然后为您的 PK 使用 GUID。
似乎没有人解释为什么复制异常,我不明白为什么。
database - 防止多个数据库之间的重复键
我的情况是,我们发布了一个新版本的软件,它将使用与旧版本不同的数据库(架构中的重大变化)。新旧系统都将投入生产将有相当长的一段时间,我们需要确保在两个数据库之间生成唯一 ID(我们不希望数据库 A 中有一行具有与数据库 B) 中的行相同的 ID。数据库是 Sybase。
我想出的可能的解决方案:
- 使用支持非常大的数字的数据类型并为每个数字分配一个范围,希望它们永远不会溢出。
- 对一个数据库使用负值,对另一个数据库使用正值。
- 添加一个标识数据库的附加列,并使用该列和当前 ID 的组合作为键。
- 哭。
我还能做什么?是否有更优雅的解决方案,以某种方式让两个数据库协同工作?我相信这两个数据库将在同一台服务器上,如果这很重要的话。
sql - “选择”是否总是按主键排序?
对所有 DBA 来说,一个基本的简单问题。
当我进行选择时,是否始终保证我的结果将按主键排序,还是应该使用“order by”指定它?
我使用 Oracle 作为我的数据库。
sql - SQL:主键还是不主键?
我有一个包含用户设置集的表,它具有以下列:
UserID 与 Set 和 Key 一起是唯一的。因此,特定用户不能在一组特定设置中拥有两个相同的键。设置是按集合检索的,因此如果用户从某个集合中请求某个密钥,则会下载整个集合,这样下次需要同一集合中的密钥时,就不必去数据库了.
我应该在所有三列(userid、set 和 key)上创建一个主键,还是应该创建一个具有主键的额外字段(例如,一个名为 SettingID 的自动增量整数,我猜这是个坏主意),还是不创建一个主键键,只是创建一个唯一的索引?
- - - 更新 - - -
只是为了澄清一下:这是行表的结尾,无论如何它都没有加入。UserID 是用户表的 FK。Set 不是 FK。它几乎是我的 GUI 的辅助表。举个例子:用户第一次访问网站的某些部分时会得到一个帮助气球,如果他们愿意,他们可以关闭它。一旦他们点击它,我将在“GettingStarted”集中添加一些设置,表明他们的 helpballoon X 已被禁用。下次当用户访问同一页面时,该设置将声明不再显示帮助气球 X。
database - GUID 与 INT 身份
可能重复:
你喜欢你的主键吗?
我知道使用 GUID 的好处,以及使用和 INT 作为数据库中的 PK 的好处。考虑到 GUID 本质上是 128 位 INT,而普通 INT 是 32 位,因此 INT 可以节省空间(尽管这一点在大多数现代系统中通常没有实际意义)。
最后,在什么情况下,您会认为自己使用 INT 作为 PK 还是使用 GUID?
database - 数据库表是否应该始终具有主键?
我的数据库表中是否应该始终有一个主键?
让我们采用 SO 标记。您可以在任何修订中看到标签,它可能位于带有 postID 和修订号的 tag_rev 表中。我需要为此进行PK吗?
另外,由于它在 rev 表中并且当前未使用标签应该是 tagID 的 blob,而不是多个 post_id tagid 对的多个条目?
primary-key - 抄表+新PK
我有一张没有PK的桌子。该表大约有 500 行,所以我不想手动编写它们。添加PK的最佳方法是什么?
谢谢,
拉法
mysql - NetBeans 6.7 Beta - 为什么它认为某些表没有主键?
我正在使用 NetBeans 6.7 Beta 从 MySQL(版本 '5.0.45-log')数据库创建实体类。NetBeans 接受大多数表,但始终拒绝某些表(我看不到模式),说它们“没有主键”。所有表都使用 InnoDB 引擎。所有表都有一个或多个列的主键。MySQL 查询浏览器和 NetBeans 的内部数据库导航器都同意所有表实际上都有一个主键。这是怎么回事?
这是生成坏表的脚本片段:
是什么赋予了?提前致谢。
primary-key - 如何解析 RDBMS 中的多对多集合实体?
我正在尝试为艺术家和歌曲建模,但我有一个问题,我有一个 Song_Performance 可以由许多艺术家表演(比如二重唱),所以我有一个 Artist_Group 来代表歌曲的演唱者。
好吧,我现在在 Artist 和 Artist_Group 之间建立了多对多的关系,其中 Artist_Group 由该组中的艺术家集合唯一标识。我可以创建一个交集实体,表示艺术家参与 Artist_Group (Artist_Group_Participation?)
我无法想出如何为 Artist_Group 实体提供一个主键,该主键保留了同一组艺术家代表同一组的事实,并且缺少 Artist_Group 实体的主键意味着我缺少一个Artist_Group_Participation 实体的外键。
John Carlis 和 Joseph Maguire 的“Mastering Data Modeling”一书提到了这种形状并将其称为“Many-Many Collection Entity”,并指出它非常罕见,但没有说明如何解决它,因为显然很多一对多关系不能直接存储在 RDBMS 中。我该如何代表这个?
编辑:
看起来每个人都在建议一个交叉表,但这不是我的问题。我有这个。我的问题是强制执行约束,即您不能添加 Artist_Group 条目,其中包含的艺术家组与现有组相同,忽略顺序。我想过让 Artist_Group 的 ID 是一个 varchar,它是组成它的各种艺术家的串联,如果顺序很重要,这将解决问题,但是为“Elton John and Billy Joel”设置一个 Artist_Group 并不能阻止添加“比利·乔尔和埃尔顿·约翰”的组合。
ruby-on-rails - 可以依赖数据库中的自动递增主键吗?
在我目前的 Rails 应用程序中,我通过按“ created_at
”字段对模型进行排序来解决调度冲突。但是,我意识到,当从允许这样做的表单中插入多个模型时,所有created_at
时间都是完全相同的!
这更像是一个最佳编程实践的问题:您的应用程序是否可以依赖数据库中的 ID 列来越来越大地递增,INSERT
以获得它们的创建顺序?换句话说,我可以按 ID 列对从数据库中提取的一组行进行排序,并确保这是基于创建顺序的准确排序吗?这是我的应用程序中的一个好习惯吗?