dm_add_pk() marks the specified columns as the primary key of the specified table. If check == TRUE, then it will first check if the given combination of columns is a unique key of the table. If force == TRUE, the function will replace an already set key.

dm_rm_pk() removes a primary key from a table and leaves the dm object otherwise unaltered. Foreign keys that point to the table from other tables, can be optionally removed as well.

dm_add_pk(dm, table, columns, check = FALSE, force = FALSE)

dm_rm_pk(dm, table, rm_referencing_fks = FALSE)



A dm object.


A table in the dm.


Table columns, unquoted.


Boolean, if TRUE, a check is made if the combination of columns is a unique key of the table.


Boolean, if FALSE (default), an error will be thrown if there is already a primary key set for this table. If TRUE, a potential old pk is deleted before setting a new one.


Boolean: if FALSE (default), will throw an error if there are foreign keys addressing the primary key that is to be removed. If TRUE, the function will remove, in addition to the primary key of the table argument, also all foreign key constraints that are pointing to it.


For dm_add_pk(): An updated dm with an additional primary key.

For dm_rm_pk(): An updated dm without the indicated primary key.

Compound keys

Currently, keys consisting of more than one column are not supported. This feature is planned for dm 0.2.0. The syntax of these functions will be extended but will remain compatible with current semantics.

See also

Other primary key functions: dm_get_all_pks(), dm_get_pk(), dm_has_pk(), enum_pk_candidates()


nycflights_dm <- dm( planes = nycflights13::planes, airports = nycflights13::airports ) nycflights_dm %>% dm_draw()
%0 airports airports planes planes
# the following works nycflights_dm %>% dm_add_pk(planes, tailnum) %>% dm_add_pk(airports, faa, check = TRUE) %>% dm_draw()
%0 airports airports faa planes planes tailnum
# the following throws an error: try( nycflights_dm %>% dm_add_pk(planes, manufacturer, check = TRUE) )
#> Error : (`manufacturer`) not a unique key of `planes`.
dm_nycflights13() %>% dm_rm_pk(airports, rm_referencing_fks = TRUE) %>% dm_draw()
%0 airlines airlines carrier airports airports flights flights carrier tailnum flights:carrier->airlines:carrier planes planes tailnum flights:tailnum->planes:tailnum weather weather