标签: unique-index

Rails唯一性约束和匹配null列的db唯一索引

我的迁移文件中有以下内容

  def self.up
    create_table :payment_agreements do |t|
      t.boolean    :automatic, :default => true, :null => false
      t.string     :payment_trigger_on_order
      t.references :supplier
      t.references :seller
      t.references :product
      t.timestamps
    end
  end
Run Code Online (Sandbox Code Playgroud)

我想确保如果指定了product_id它是唯一的但我也想允许null所以我在我的模型中有以下内容:

  validates :product_id,
            :uniqueness => true,
            :allow_nil => true
Run Code Online (Sandbox Code Playgroud)

工作得很好,但我应该为迁移文件添加一个索引

add_index :payment_agreements, :product_id, :unique => true
Run Code Online (Sandbox Code Playgroud)

显然,当为product_id插入两个空值时,这将抛出异常.我可以简单地省略迁移中的索引,但是我有可能获得两个PaymentAgreements,其中product_id与此处所示相同:并发性和完整性

我的问题是处理这个问题的最佳/最常用方法是什么

migration ruby-on-rails unique-index validates-uniqueness-of

16
推荐指数
2
解决办法
1万
查看次数

跨表的SQL Server唯一索引

可以跨表创建唯一索引,基本上使用视图和唯一索引.

我有一个问题.

给出两个(或三个)表.

Company
- Id
- Name

Brand
- Id
- CompanyId
- Name
- Code

Product
- Id
- BrandId
- Name
- Code
Run Code Online (Sandbox Code Playgroud)

我想确保组合的独特性:

Company / Brand.Code
Run Code Online (Sandbox Code Playgroud)

Company / Brand.Product/Code
Run Code Online (Sandbox Code Playgroud)

很独特.

CREATE VIEW TestView
WITH SCHEMABINDING
AS
    SELECT b.CompanyId, b.Code
    FROM dbo.Brand b

    UNION ALL

    SELECT b.CompanyId, p.Code
    FROM dbo.Product p
         INNER JOIN dbo.Brand b ON p.BrandId = b.BrandId
Run Code Online (Sandbox Code Playgroud)

视图的创建是成功的.

CREATE UNIQUE CLUSTERED INDEX UIX_UniquePrefixCode
    ON TestView(CompanyId, Code)
Run Code Online (Sandbox Code Playgroud)

因为这个失败了 UNION

我该如何解决这个问题呢?

基本上,两者的代码都Brand/Product不能在公司内重复.

笔记:

我得到的错误是: …

sql sql-server unique-index

12
推荐指数
1
解决办法
1866
查看次数

PostgreSQL如何强制执行UNIQUE约束/它使用什么类型的索引?

在阅读关于索引唯一性文档作为实现细节后,我一直在尝试理清Postgres中唯一和索引之间的关系:

向表中添加唯一约束的首选方法是ALTER TABLE ... ADD CONSTRAINT.使用索引来强制执行唯一约束可以被视为不应直接访问的实现细节.但是,应该知道没有必要在唯一列上手动创建索引; 这样做只会复制自动创建的索引.

因此,按照他们的说法,我只是将事物声明为唯一并使用隐式索引 - 或 - 创建索引而不是假设值是唯一的.这是一个错误吗? 

我将从独特中获得什么样的指数?假设只有一个btree会接受唯一约束而且unique会隐式创建一个索引,那么UNIQUE是否真的创建了一个btree索引?我不想无意中在哈希索引上运行范围. 

postgresql indexing database-design unique-index unique-constraint

11
推荐指数
1
解决办法
4080
查看次数

唯一索引,varchar列和(空白)空格的行为

我正在使用Microsoft SQL Server 2008 R2(带有最新的Service Pack/patches),数据库排序规则是SQL_Latin1_General_CP1_CI_AS.

以下代码:

SET ANSI_PADDING ON;
GO

CREATE TABLE Test (
   Code VARCHAR(16) NULL
);
CREATE UNIQUE INDEX UniqueIndex
    ON Test(Code);

INSERT INTO Test VALUES ('sample');
INSERT INTO Test VALUES ('sample ');

SELECT '>' + Code + '<' FROM Test WHERE Code = 'sample        ';
GO
Run Code Online (Sandbox Code Playgroud)

产生以下结果:

(1排受影响)

Msg 2601,Level 14,State 1,Line 8

无法在对象'dbo.Test'中插入具有唯一索引'UniqueIndex'的重复键行.重复键值为(样本).

该语句已终止.

------------

>样品<

(1排受影响)

我的问题是:

  1. 我假设索引不能存储尾随空格.任何人都可以指向我指定/定义此行为的官方文档吗?
  2. 是否有一个设置来改变这种行为,也就是说,让它将'sample'和'sample'识别为两个不同的值(顺便说一句,它们都是这样),因此两者都可以在索引中.
  3. 为什么地球上的SELECT会返回一行?SQL Server必须使用WHERE子句中的空格做一些非常有趣/聪明的事情,因为如果删除索引中的唯一性,两个INSERT都将运行正常,SELECT将返回两行!

任何帮助/指针在正确的方向将不胜感激.谢谢.

t-sql sql-server unique-index string-comparison

11
推荐指数
1
解决办法
3726
查看次数

MongoDB中唯一索引的优势

我试图搜索Mongo文档,但是无法真正找到有关唯一索引的查询是否比非唯一索引上的查询更快的详细信息(给定相同的数据)

所以我理解一个独特的指数将具有高选择性和良好的性能.但是,如果两个字段的串联是唯一的,那么非唯一复合索引的执行速度是否比唯一复合索引慢?

我假设唯一索引可以减慢插入速度,因为必须验证唯一性.但是,如果有的话,读取性能改进的独特指标真的值得吗?

unique-index mongodb mongodb-indexes

11
推荐指数
1
解决办法
3096
查看次数

如何按不在唯一索引中的列对MySQL表进行分区

我们有一个简单的产品表.每个产品都有其独特的ID和类别.用户经常按类别搜索,因此我想按类别对产品进行分区.一个分区中的每个类别,例如

我该怎么做?因为我的ID列当然有一个主键,需要我的ID唯一.每个类别都不是唯一的.

但是,partitiong具有这样的限制:"表中的每个唯一键必须使用表的分区表达式中的每一列".

那么,这不会使分区有点无用吗?或者我错过了什么?我该怎么办?

http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html

mysql partitioning unique-index

9
推荐指数
1
解决办法
8434
查看次数

检查字段是否在mysql和PHP中具有属性`UNIQUE`

如何检查表中的字段是否设置为UNIQUE

例如,我有一个名为users字段email设置的表UNIQUE和一个picture未设置为的字段UNIQUE,我想在选择之前检查字段是否设置为UNIQUE如果没有设置,则不要这样做SELECT.

我试着SELECT然后计算返回的行数,如果超过1那么它不是UNIQUE,

"SELECT * FROM table WHERE email='$email'"
//...some mysql php line later
if($count > 1){
    //return nothing
}
Run Code Online (Sandbox Code Playgroud)

但它没有效率,如果没有重复就会怎么样.

什么是检查一个字段是否被设置为最佳方式UNIQUEPHP

编辑:没有重复并不意味着它UNIQUE有财产

php mysql indexing unique-index

9
推荐指数
1
解决办法
1万
查看次数

如何约束多个列以防止重复,但忽略空值?

这是我在Oracle数据库(10g)中运行的一个小实验.除了(Oracle的)实现方便之外,我无法弄清楚为什么有些插入被接受而其他插入被拒绝.

create table sandbox(a number(10,0), b number(10,0));
create unique index sandbox_idx on sandbox(a,b);

insert into sandbox values (1,1); -- accepted
insert into sandbox values (1,2); -- accepted
insert into sandbox values (1,1); -- rejected

insert into sandbox values (1,null); -- accepted
insert into sandbox values (2,null); -- accepted
insert into sandbox values (1,null); -- rejected

insert into sandbox values (null,1); -- accepted
insert into sandbox values (null,2); -- accepted
insert into sandbox values (null,1); -- rejected

insert into sandbox values …
Run Code Online (Sandbox Code Playgroud)

oracle null nullable constraints unique-index

8
推荐指数
2
解决办法
9362
查看次数

PostgreSQL 约束,在提交时检查,而不是更早检查

是否可以在 PostgreSQL 中创建唯一索引或其他类型的约束,这将在事务 COMMIT 上进行检查,而不是提前一毫秒?

我需要一对 (record_id, ordering) 的索引,因此我确保在给定的 record_id 中只有一个且不超过一个记录具有相同的顺序。问题出在哪里?好吧,问题在于我使用的 Web 框架处理重新排序项目的方式。看起来,当移动一个项目时,当其排序顺序发生更改时,框架会使用新的排序值写入新项目,然后不久之后它会更新另一个项目,从而创建一种临时情况,其中多个记录具有相同的订购值。重新排序所有内容后,所有记录都会更新,并且在事务提交时,一切都应该再次正常。

如果重要的话,我正在使用 PostgreSQL 10。

sql postgresql constraints unique-index unique-constraint

8
推荐指数
1
解决办法
4612
查看次数

SQL Server - 唯一索引与唯一约束 - 回复。重复值

唯一索引可确保索引键列中的值是唯一的。唯一约束 保证不能将重复值插入到创建约束的列中。创建唯一约束时,会在列上自动创建相应的唯一索引。

问题

  1. 如果我们在列上有唯一索引并且没有唯一约束,是否可以插入重复值?
  2. 列上任何现有重复项怎么样 - 它是否允许创建唯一索引或唯一约束?

sql-server unique-index unique-constraint

8
推荐指数
1
解决办法
1万
查看次数