Questions tagged «unique-constraint»

DDL UNIQUE约束可确保包含在表中所有行中的一列或一组列中的数据是唯一的。因此,所涉及的一个或多个列中包含的数据对于唯一标识相关表中的行很有用。

3
电子邮件地址是唯一键还是主键?
我是数据库的新手。我四处阅读,发现使用电子邮件地址作为主键可能不是一个好主意,因为字符串比较慢,这会影响复杂连接中的性能;如果电子邮件发生更改,我必须更改所有外键,这需要很多工作努力。 但是,如果我的用户表要求每个用户都有一个电子邮件地址,并且每个电子邮件地址都应该是唯一的,那么在电子邮件列上添加唯一索引就足够了吗?因为afaik唯一字段允许空值,而我要求每个用户都有一个电子邮件地址,但不允许空值。我在这里想念什么吗?或者我想使电子邮件列唯一,并确保在服务器上的数据验证期间用户确实输入了电子邮件地址,以便每个用户都有一个电子邮件地址?

4
NVARCHAR列作为PRIMARY KEY或UNIQUE列
我正在开发SQL Server 2012数据库,并且对nvarchar列作为主键有疑问。 我有这张桌子: CREATE TABLE [dbo].[CODES] ( [ID_CODE] [bigint] IDENTITY(1,1) NOT NULL, [CODE_LEVEL] [tinyint] NOT NULL, [CODE] [nvarchar](20) NOT NULL, [FLAG] [tinyint] NOT NULL, [IS_TRANSMITTED] [bit] NOT NULL DEFAULT 0, CONSTRAINT [PK_CODES] PRIMARY KEY CLUSTERED ( [CODE_LEVEL] ASC, [CODE] ASC ) ) 但是现在我想使用[CODE]列作为主键并删除[ID_CODE]列。 如果我的NVARCHAR专栏为,是否有任何问题或惩罚PRIMARY KEY? [CODE]列值必须是唯一的,因此我认为可以UNIQUE为该列设置约束。 我必须用[CODE]作主键还是UNIQUE对[CODE]列设置约束会更好?


4
使用广泛的PK与单独的合成密钥和UQ之间的性能考虑因素是什么?
我有几个表,其中的记录可以通过几个广泛的业务领域进行唯一标识。过去,我将这些字段用作PK,并牢记以下好处: 简单; 没有多余的字段,只有一个索引 群集允许快速合并联接和基于范围的过滤器 但是,我听说过创建合成IDENTITY INTPK,而用单独的UNIQUE约束来强制业务密钥的情况。优点是,较窄的PK使得二级索引要小得多。 如果一个表有没有比PK其他指标,我看不出有任何理由赞成第二种方法,虽然在一个大表它可能是最好的假设,指数可能在未来是必要的,因此,有利于在狭窄合成PK 。我有什么需要考虑的地方吗? 顺便说一句,我并不是在反对在数据仓库中使用合成密钥,我只是对何时使用单个广泛的PK,何时使用狭窄的PK加广泛的英国感兴趣。

3
使字段唯一会使索引吗?
如果unique对字段进行约束,是否还需要在该字段上建立索引才能获得可伸缩的插入时间?或者这是为我完成的(即使它使用的索引不能公开访问?) 具体来说,我正在与Apache Derby一起进行原型设计,尽管我可能会在不久的将来将其移至MySQL。我也希望SQL标准中可能有一些说明。 我将永远不需要按此字段进行搜索,因此我宁愿不要创建无用的索引。但是我宁愿使用无用的索引也不愿使用O(n)插入时间。

2
为什么复合外键需要单独的唯一约束?
这是一个简单的表,其中的记录可以引用同一表中的父记录: CREATE TABLE foo ( id SERIAL PRIMARY KEY, parent_id INT NULL, num INT NOT NULL, txt TEXT NULL, FOREIGN KEY (parent_id) REFERENCES foo(id) ); 在附加要求下,num父记录和子记录之间的其他字段值之一必须相同,我认为应该使用复合外键来解决问题。我将最后一行更改为 FOREIGN KEY (parent_id, num) REFERENCES foo(id, num) 并得到错误:没有唯一的约束条件匹配给定表“ foo”的键。 我可以轻松添加此约束,但是当所引用的列(id)中的一个已被保证是唯一的时,我不明白为什么有必要这样做?从我的角度来看,新约束将是多余的。

3
将除一列以外的所有列标记为主键是否合理?
我有一张代表电影的桌子。字段是: id (PK), title, genre, runtime, released_in, tags, origin, downloads。 我的数据库不能被重复的行污染,所以我想强制唯一性。问题在于,除了tags和之外,不同的电影可能具有相同的标题,甚至相同的字段downloads。如何实施唯一性? 我想到了两种方法: 使除downloads主键之外的所有字段。我将其downloads排除在外,因为它是JSON,它可能会影响性能。 仅保留id为主键,但为所有其他列添加唯一约束(再次除外downloads)。 我读过这个非常相似的问题,但是我不太明白该怎么办。当前,该表与任何其他表均不相关,但将来可能与此相关。 目前,我的记录略少于20,000,但是我希望这个数字会增加。我不知道这是否与问题有关。 编辑:我修改了架构,这是我将如何创建表: CREATE TABLE movies ( id serial PRIMARY KEY, title text NOT NULL, runtime smallint NOT NULL CHECK (runtime >= 0), released_in smallint NOT NULL CHECK (released_in > 0), genres text[] NOT NULL default …

2
DynamoDB-多个范围键
是否可以将多个字段用作范围键? 假设我有一张表格,其中每一行都由 <A,B,C> ------------------------------- A | B | C | D | E | ------------------------------- A主hash键在哪里 我想B和C作为主range键。 如何在DynamoDB中将两个以上字段用作主键?

2
如何通过表字段的组合使用唯一键?
看看下面的sqlfiddle:http ://sqlfiddle.com/#!2/dacb5/1 CREATE TABLE contacts ( id int auto_increment primary key, name varchar(20), network_id int, network_contact_id int ); INSERT INTO contacts (name, network_id, network_contact_id) VALUES ('John', 4, 10), ('Alex', 4, 11), ('Bob', 4, 12), ('Jeff', 4, 45), ('Bill', 7, 11), ('Walter', 7, 45), ('Jessie', 7, 360) ; 我有一个基本的联系表。该network_id和network_contact_id字段包含链接到其他表的ID号码。 我希望能够运行INSERT IGNORE查询,此表,但我想用的组合network_id,并network_contact_id作为唯一键来匹配。 …

1
从JSON对象创建UNIQUE约束
让我们举个例子表人,只有两个字段:id和data(json)。 SELECT data FROM peoples ; {"name": "Adam","pos":"DBA","age":22 } {"name": "Alice","pos":"Security","age":33 } {"name": "Bob","pos":"Manager","age":42 } 我想为“ pos”字段创建约束,该约束必须是唯一的。我在互联网上搜索了有关JSON约束的信息,但没有结果。 我该如何处理?
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.