Creates a database schema from given functional dependencies, satisfying at least third normal form, using Bernstein's synthesis.
normalise(
dependencies,
single_ref = FALSE,
ensure_lossless = TRUE,
reduce_attributes = TRUE,
remove_avoidable = FALSE,
constants_name = "constants",
progress = FALSE,
progress_file = ""
)
A database_schema
object, containing the synthesis
relation schemas and the created foreign key references.
a functional_dependency
object, as given by
discover
.
a logical, FALSE by default. If TRUE, then only one reference between each relation pair is kept when generating foreign key references. If a pair has multiple references, the kept reference refers to the earliest key for the child relation, as sorted by priority order.
a logical, TRUE by default. If TRUE, and the decomposition isn't lossless, an extra relation is added to make the decomposition lossless.
a logical, TRUE by default. If TRUE,
dependencies
are checked for determinant attributes that are made
redundant by the other dependencies. This is redundant if
dependencies
is output from discover
, since there will be no
such redundant attributes.
a logical, indicating whether to remove avoidable attributes in relations. If so, then an attribute are removed from relations if the keys can be changed such that it is not needed to preserve the given functional dependencies.
a scalar character, giving the name for any relation created to store constant attributes. If this is the same as a generated relation name, it will be changed, with a warning, to ensure that all relations have a unique name.
a logical, for whether to display progress to the user during
dependency search in discover
.
a scalar character or a connection. If progress
is non-zero, determines where the progress is written to, in the same way
as the file
argument for cat
.
This is a wrapper function for applying synthesise
and
autoref
, in order. For creating relation schemas and foreign
key references separately, use these functions directly. See both functions
for examples.
For details on the synthesis algorithm used, see synthesise
.