2012-07-10 53 views
1

在我的Web应用程序中,我有客户名称和客户电话号码。我应该多次拨打同一个电话号码。但我不应该允许多次输入相同的客户名称。如果已有一位名为'Sean Patrick'的客户,手机号码为“6039274849”。将来我不应该允许一个新用户使用同一个名字('Sean Patrick')。但我可以允许输入相同的手机号码('6039274849')。Oracle sql - 我们可以在同一个表中有2个唯一的列吗

假设为

CUSTOMER TABLE 

columns 
CUSTOMER_ID UNIQUE 
CUSTOMER NAME 
CUST_MOB_NUMBER 

我使用Spring Roo的表结构。我们将使用HibernateJPA(aspectJ代码)来处理数据库相关的东西。

任何人都可以告诉如何做到这一点。截至目前,我正在考虑制作2列uique。 有没有什么办法让2列独一无二?

+0

如果有什么东西你应该遇到一个拥有多个电话号码的客户,但是你不应该真的遇到拥有相同电话号码的多个客户。 – RobB 2012-07-10 04:10:44

+0

而且您可能会遇到同名的客户。 – Jesse 2012-07-10 04:19:56

+0

换句话说,手机号码可以是任何东西(可能不唯一)。但应该有独特的客户名称。不重复名称。与gmail中的user_id类似。 – user1514499 2012-07-10 05:09:15

回答

4

假设这些要求是有意义的(说没有两个客户会有相同的名字 - 世界上有很多John Smiths)。而且人们通常有多个手机号码。

可以同时声明customer_idcustomer_name作为唯一的(虽然customer_id几乎可以肯定应被宣布为一个主键,而不仅仅是唯一的)

CREATE TABLE customer (
    customer_id  NUMBER PRIMARY KEY, 
    customer_name VARCHAR2(100) UNIQUE, 
    cust_mob_number VARCHAR2(20) 
); 

你一个也声明了两个列的组合作为唯一

CREATE TABLE customer (
    customer_id  NUMBER PRIMARY KEY, 
    customer_name VARCHAR2(100), 
    cust_mob_number VARCHAR2(20), 
    CONSTRAINT uk_name_and_number UNIQUE(customer_name, customer_mob_number) 
); 
相关问题