Determine which columns would be good candidates to be used as foreign keys of a table,
to reference the primary key column of another table of the dm
object.
Usage
dm_enum_fk_candidates(dm, table, ref_table, ...)
enum_fk_candidates(dm_zoomed, ref_table, ...)
Value
A tibble with the following columns:
columns
columns of
table
,candidate
boolean: are these columns a candidate for a foreign key,
why
if not a candidate for a foreign key, explanation for for this.
Details
dm_enum_fk_candidates()
first checks if ref_table
has a primary key set,
if not, an error is thrown.
If ref_table
does have a primary key, then a join operation will be tried using
that key as the by
argument of join() to match it to each column of table
.
Attempting to join incompatible columns triggers an error.
The outcome of the join operation determines the value of the why
column in the result:
an empty value for a column of
table
that is a suitable foreign key candidatethe count and percentage of missing matches for a column that is not suitable
the error message triggered for unsuitable candidates that may include the types of mismatched columns
enum_fk_candidates()
works like dm_enum_fk_candidates()
with the zoomed table as table
.
Life cycle
These functions are marked "experimental" because we are not yet sure about
the interface, in particular if we need both dm_enum...()
and enum...()
variants.
Changing the interface later seems harmless because these functions are
most likely used interactively.
See also
Other foreign key functions:
dm_add_fk()
,
dm_get_all_fks()
,
dm_rm_fk()
Examples
dm_nycflights13() %>%
dm_enum_fk_candidates(flights, airports)
#> # A tibble: 19 × 3
#> columns candidate why
#> <keys> <lgl> <chr>
#> 1 origin TRUE ""
#> 2 year FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 3 month FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 4 day FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 5 dep_time FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 6 sched_dep_time FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 7 dep_delay FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 8 arr_time FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 9 sched_arr_time FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 10 arr_delay FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 11 carrier FALSE "values of `flights$carrier` not in `airports$faa`:…
#> 12 flight FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 13 tailnum FALSE "values of `flights$tailnum` not in `airports$faa`:…
#> 14 dest FALSE "values of `flights$dest` not in `airports$faa`: SJ…
#> 15 air_time FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 16 distance FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 17 hour FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 18 minute FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 19 time_hour FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
dm_nycflights13() %>%
dm_zoom_to(flights) %>%
enum_fk_candidates(airports)
#> # A tibble: 19 × 3
#> columns candidate why
#> <keys> <lgl> <chr>
#> 1 origin TRUE ""
#> 2 year FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 3 month FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 4 day FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 5 dep_time FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 6 sched_dep_time FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 7 dep_delay FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 8 arr_time FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 9 sched_arr_time FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 10 arr_delay FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 11 carrier FALSE "values of `flights$carrier` not in `airports$faa`:…
#> 12 flight FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 13 tailnum FALSE "values of `flights$tailnum` not in `airports$faa`:…
#> 14 dest FALSE "values of `flights$dest` not in `airports$faa`: SJ…
#> 15 air_time FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 16 distance FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 17 hour FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 18 minute FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…
#> 19 time_hour FALSE "\u001b[1m\u001b[22mCan't join `x$value1` with `y$v…