Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the purpose of constraint naming

What is the purpose of naming your constraints (unique, primary key, foreign key)?

Say I have a table which is using natural keys as a primary key:

CREATE TABLE Order (     LoginName        VARCHAR(50)    NOT NULL,     ProductName      VARCHAR(50)    NOT NULL,     NumberOrdered    INT            NOT NULL,     OrderDateTime    DATETIME       NOT NULL,     PRIMARY KEY(LoginName, OrderDateTime) ); 

What benefits (if any) does naming my PK bring?

Eg. Replace:

    PRIMARY KEY(LoginName, OrderDateTime) 

With:

    CONSTRAINT Order_PK PRIMARY KEY(LoginName, OrderDateTime) 

Sorry if my data model is not the best, I'm new to this!

like image 466
Andrew Avatar asked Sep 09 '09 03:09

Andrew


People also ask

What is a constraint name some constraints?

Constraints can be categorized into five types: A NOT NULL constraint is a rule that prevents null values from being entered into one or more columns within a table. A unique constraint (also referred to as a unique key constraint) is a rule that forbids duplicate values in one or more columns within a table.

What is constraint name in Oracle?

In Oracle, the default constraint name starts with the username, followed by ' _C ' and a sequence number. The types of constraint are ' C ' ( check ), ' P ' (primary key), ' U ' (unique constraint), and ' R ' (foreign key). All default constraint names are generated as ' SYS ', ' _ ', and the number.

What is constraint name in foreign key?

The FOREIGN KEY constraint is used to prevent actions that would destroy links between tables. A FOREIGN KEY is a field (or collection of fields) in one table, that refers to the PRIMARY KEY in another table.

How will you find a constraint name?

Discussion: Use the view table_constraints in the information_schema schema. The column table_name gives you the name of the table in which the constraint is defined, and the column constraint_name contains the name of the constraint.


2 Answers

Here's some pretty basic reasons.

(1) If a query (insert, update, delete) violates a constraint, SQL will generate an error message that will contain the constraint name. If the constraint name is clear and descriptive, the error message will be easier to understand; if the constraint name is a random guid-based name, it's a lot less clear. Particulary for end-users, who will (ok, might) phone you up and ask what "FK__B__B_COL1__75435199" means.

(2) If a constraint needs to be modified in the future (yes, it happens), it's very hard to do if you don't know what it's named. (ALTER TABLE MyTable drop CONSTRAINT um...) And if you create more than one instance of the database "from scratch" and use system-generated default names, no two names will ever match.

(3) If the person who gets to support your code (aka a DBA) has to waste a lot of pointless time dealing with case (1) or case (2) at 3am on Sunday, they're quite probably in a position to identify where the code came from and be able to react accordingly.

like image 123
Philip Kelley Avatar answered Oct 04 '22 21:10

Philip Kelley


To identify the constraint in the future (e.g. you want to drop it in the future), it should have a unique name. If you don't specify a name for it, the database engine will probably assign a weird name (e.g. containing random stuff to ensure uniqueness) for you.

like image 39
mmx Avatar answered Oct 04 '22 19:10

mmx