[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

Column Uniqueness

Posted on 2012-03-14
8
Medium Priority
?
557 Views
Last Modified: 2012-03-14
I had a look at the Northwind database and found that I could add a new "Product" row having the same "ProductName". Is this how the table is supposed to work? The only uniqueness is on the identity column, which of cause is the primary key.

One would think that the "ProductName" should be unique, or am I not understanding the roles of these two columns correctly.

As far as I can see though, a mistake can be made if a data entry clerk captures a new row but a duplicate "ProductName". This would probably not be detected since the primary key is the identity column.

Is my reasoning correct, if so, then should I design a database making the "ProductName" column a primary key column?

When is using an identity column as the primary key not okay?
0
Comment
Question by:mitdaniels
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
8 Comments
 
LVL 41

Accepted Solution

by:
Kyle Abrahams earned 400 total points
ID: 37722115
You can just add a unique constraint which will do the same thing.

Primary keys create physical indexes (sorted on the hard drive) for searching, and is by far the fastest way to access a table.

If you were to add that to your text column, then any time the data changed it would physically re-sort the info.  

EG:

    ID ONLY                           TEXT ONLY

1  Banana                          1    Banana
2  Orange                          2   Orange

becomes (after update tbl set name = 'Apple' where id = 2)

1  Banana                          2  Apple    
2  Apple                            1  Orange
0
 
LVL 46

Expert Comment

by:Kent Olsen
ID: 37722142
>> should I design a database making the "ProductName" column a primary key column?

No.  A primary key is typically the fastest way to access a column.  If you're joining the table to another table by primary key, you want that to be as fast as possible.  Joining by a contrived integer (an identity) is faster than joining by data (a varchar).

>> When is using an identity column as the primary key not okay?

Almost always.  The entire point of an identity column is to be the primary key.

That said, there may be special circumstances where there is no need for a true primary key, but there is a need for uniqueness.  In that case, omitting the identity column and placing a unique index on the column should suffice.


Kent
0
 

Author Comment

by:mitdaniels
ID: 37722209
Thanks, how do I add a unique constraint to a column in SQL Server 2008R2?
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 41

Assisted Solution

by:Kyle Abrahams
Kyle Abrahams earned 400 total points
ID: 37722221
ALTER TABLE <table>
ADD CONSTRAINT <NAME_OF_CONSTRAINT> UNIQUE (<col 1>,<col 2>)

note: can be just 1 column.
0
 
LVL 46

Assisted Solution

by:Kent Olsen
Kent Olsen earned 200 total points
ID: 37722256
Hi Mit,

How many rows do you have in the table?  

The unique constraint is fine if you've got a small number of rows, but if you have a significant amount of data, and/or there are a lot of updates/inserts to the table, you should consider adding a UNIQUE INDEX on that column instead.

Both will ensure uniqueness, but the only way that the DBMS can validate uniqueness is to check the contents of the table.  If an appropriate index is available the DBMS will use it and the validation requires just an index search.  If there is no index available, the constraint will have to read an awful lot of data, which can be a performance killer.

Also, with the UNIQUE INDEX you'll have the added benefit of being able to use the index in your own queries if you need one.


Kent
0
 

Author Closing Comment

by:mitdaniels
ID: 37722309
Thanks, that was really quick and very helpful.
0
 

Author Comment

by:mitdaniels
ID: 37722380
Not that it's a problem, but I see that the Contraint was added to the Indexes folder not the Constraints folder??
0
 
LVL 46

Expert Comment

by:Kent Olsen
ID: 37722396
Hi Mit,

SQL Server implements a unique contraint by placing a unique index on the column(s).  I must admit that I don't know if the index is general enough to be used by user queries though.


Kent
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A Stored Procedure in Microsoft SQL Server is a powerful feature that it can be used to execute the Data Manipulation Language (DML) or Data Definition Language (DDL). Depending on business requirements, a single Stored Procedure can return differe…
Microsoft Access is a place to store data within tables and represent this stored data using multiple database objects such as in form of macros, forms, reports, etc. After a MS Access database is created there is need to improve the performance and…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…

656 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question