我的迁移文件中有以下内容
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
可以跨表创建唯一索引,基本上使用视图和唯一索引.
我有一个问题.
给出两个(或三个)表.
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
不能在公司内重复.
笔记:
我得到的错误是: …
在阅读关于索引唯一性的文档作为实现细节后,我一直在尝试理清Postgres中唯一和索引之间的关系:
向表中添加唯一约束的首选方法是ALTER TABLE ... ADD CONSTRAINT.使用索引来强制执行唯一约束可以被视为不应直接访问的实现细节.但是,应该知道没有必要在唯一列上手动创建索引; 这样做只会复制自动创建的索引.
因此,按照他们的说法,我只是将事物声明为唯一并使用隐式索引 - 或 - 创建索引而不是假设值是唯一的.这是一个错误吗?
我将从独特中获得什么样的指数?假设只有一个btree会接受唯一约束而且unique会隐式创建一个索引,那么UNIQUE是否真的创建了一个btree索引?我不想无意中在哈希索引上运行范围.
postgresql indexing database-design unique-index unique-constraint
我正在使用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排受影响)
我的问题是:
任何帮助/指针在正确的方向将不胜感激.谢谢.
我试图搜索Mongo文档,但是无法真正找到有关唯一索引的查询是否比非唯一索引上的查询更快的详细信息(给定相同的数据)
所以我理解一个独特的指数将具有高选择性和良好的性能.但是,如果两个字段的串联是唯一的,那么非唯一复合索引的执行速度是否比唯一复合索引慢?
我假设唯一索引可以减慢插入速度,因为必须验证唯一性.但是,如果有的话,读取性能改进的独特指标真的值得吗?
我们有一个简单的产品表.每个产品都有其独特的ID和类别.用户经常按类别搜索,因此我想按类别对产品进行分区.一个分区中的每个类别,例如
我该怎么做?因为我的ID列当然有一个主键,需要我的ID唯一.每个类别都不是唯一的.
但是,partitiong具有这样的限制:"表中的每个唯一键必须使用表的分区表达式中的每一列".
那么,这不会使分区有点无用吗?或者我错过了什么?我该怎么办?
http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html
如何检查表中的字段是否设置为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)
但它没有效率,如果没有重复就会怎么样.
什么是检查一个字段是否被设置为最佳方式UNIQUE
的PHP
?
编辑:没有重复并不意味着它UNIQUE
有财产
这是我在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) 是否可以在 PostgreSQL 中创建唯一索引或其他类型的约束,这将在事务 COMMIT 上进行检查,而不是提前一毫秒?
我需要一对 (record_id, ordering) 的索引,因此我确保在给定的 record_id 中只有一个且不超过一个记录具有相同的顺序。问题出在哪里?好吧,问题在于我使用的 Web 框架处理重新排序项目的方式。看起来,当移动一个项目时,当其排序顺序发生更改时,框架会使用新的排序值写入新项目,然后不久之后它会更新另一个项目,从而创建一种临时情况,其中多个记录具有相同的订购值。重新排序所有内容后,所有记录都会更新,并且在事务提交时,一切都应该再次正常。
如果重要的话,我正在使用 PostgreSQL 10。
唯一索引可确保索引键列中的值是唯一的。唯一约束 保证不能将重复值插入到创建约束的列中。创建唯一约束时,会在列上自动创建相应的唯一索引。
问题:
unique-index ×10
sql-server ×3
constraints ×2
indexing ×2
mysql ×2
postgresql ×2
sql ×2
migration ×1
mongodb ×1
null ×1
nullable ×1
oracle ×1
partitioning ×1
php ×1
t-sql ×1