Difference between Teradata Primary Index and Primary Key
One must not get confused between Primary Key and Primary Index in Teradata. Primary KEY is more of a logical thing however Primary INDEX is more of physical thing. In Teradata, Primary INDEX is used for finding best access path for data retrieval and data insertion and Primary KEY is used for finding each rows uniquely just like in other RDBMS. So below are few differences between PRIMARY KEY and PRIMARY INDEX:
PRIMARY KEY | PRIMARY INDEX | |
1 | PRIMARY KEY cannot be NULL | PRIMARY INDEX can be NULL |
2 | PRIMARY KEY is not | PRIMARY INDEX is mandatory |
3 | PRIMARY KEY does not help | PRIMARY INDEX helps in data |
4 | PRIMARY KEY should be | PRIMARY INDEX can be UNIQUE or NON UNIQUE (Primary Index). |
5 | PRIMARY KEY is logical | PRIMARY INDEX is physical |
Now we will see few scenarios to see how these two are handled in Teradata:
a) I have not defined PRIMARY INDEX or PRIMARY KEY on table what will happen now: In this case, Teradata will check if any column is defined as UNIQUE, then it will make that column as UNIQUE PRIMARY INDEX else first column will be created as PRIMARY INDEX.
b) I have not defined PRIMARY INDEX however a column is defined as PRIMARY KEY: In this case, Teradata will make the PRIMARY KEY column as UNIQUE PRIMARY INDEX of the table.
c) I have defined both PRIMARY KEY and PRIMARY INDEX on different column: In this case, Teradata will make PRIMARY KEY column as UNIQUE SECONDARY INDEX i.e. UNIQUE INDEX on the table.
So one must understand the importance of PRIMARY INDEX in Teradata. Generally, PRIMARY KEY concept is taken care by UNIQUE PRIMARY INDEX in Teradata environment.
Hi Raj, Thanks a lot for this post.I’m working in Teradata to Oracle migration project.for UNIQUE PRIMARY INDEX(PSTM_ID,PSTM_ATM,TAX_ID) changed like PSTM_ID as PRIMARY KEY and PSTM_ATM ,TAX_ID both with NOT NULL UNIQUE but bit confused with PRIMARY INDEX( PSTM_ID,PSTM_ATM,TAX_ID) as PRIMARY INDEX can be NULL, UNIQUE or NON UNIQUE.How to modify the same in Oracle?
Thanks,
Sakthi.
Hi Sakthi
Technically, yes you can have NULL in your INDEX column however you should also consider functionally what kind of values can be expected in columns.
Looking at the column names you have mentioned PSTM_ID,TAX_ID gives the impression as if these are id columns and perhaps the surrogate key columns. So functionally you may never have NULL as the value for such columns.