Use of the application

To use this application, follows the steps detailed below:

  1. Define a relation schema, i.e. a set of attributes and a set of functional dependencies. (See the section Syntax of the input data for the syntax accepted. See the section: Limitations for limits on input data).
  2. Check for the correctness of the syntax by clicking on the "Syntax check" button.
  3. Select the operation desired through one of the buttons of the section Select a simple operation or Select an advanced operation. The operation will be performed immediately, or it will require additional input. The operations requiring additional content are distinguished by the ellipsis after their name.
  4. Click on the control Show explanations when available if you want a detailed report of the steps executed by the algorithm. This is available only for certain advanced operations.
  5. If the operation requires the input of additional data, enter them in the section Input additional data, and press the button of the section Execute the operation. If you change your mind about the operation before requesting its execution, you can chose another operation, and the system will try to maintain as much as possibile the data inserted.
  6. The result will appear inside the Result section.
When a different operation is chosen, the input data are preserved as much as possible, and the previous result is not canceled until the new operation is called.

Syntax of the input data

In order to allow the pasting of data into the required fields from different sources and textbooks, as well as from the output of a previous operation, the application is quite tolerant about the syntax used. In particular:
  1. Attributes Attributes are identifiers starting with a letter and continuing with alphanumeric characters or the undescore (‘_’) character. You can write attributes separating them either by spaces, commas, or by other non alphanumeric characters. The following are valid specifications of attributes: Finally, note that, due to the tolerance on the syntax and the fact that duplicate attributes are automatically eliminated, you can paste in this field a set of functional dependencies and the system will find automatically all the attributes of the relation.
  2. Dependencies The syntax for them, anologously to attributes, allows a liberal use of non alphanumeric characters like comma or parenthesis. The only two real requirements are the followings: Example of dependencies: Note that last two examples of valid dependencies. A dependency with an empty determinant describes attributes with a constant value, while a dependency with an empty right part is trivial since it is always true.
    Finally, note that AB -> C is interpreted as: the attribute AB determines the attribute C, and not: the attributes A and B determine the attribute C, since there are no characters separating A and B.
  3. Decompositions Only the attributes of the different decompositions can be written. Each group of attributes related to a decomposed relation must be enclosed in parentheses, and the attributes must be separated by non alphanumeric characters, like spaces or commas. Example of decomposition:
    (A, B, C)
    (A D E)

Syntactic abbreviation for mutually determined attributes sets

There is a notation which simplifies the writing of two dependencies in which the determinant and the determinate exchange their role, like in a -> b and b -> a. This couple of dependencies can be written in a unique line as a<->b or a↔b, by using <-> (the three characters less-then dash greater-then, countiguous), or ↔ (the single character left right arrow, Unicode U+2194).


Simple Operations

Advanced Operations


This application has two main limitations:
  1. You can insert at most 20000 characters in each field.
  2. The number of attributes of a relation is restricted only by the total size of the field as specified in the previous limit, but, if this number is greater than 50, then any operation marked in red in the interface will not be performed. This is due to the fact that the complexity of their algorithm is, in the worst case, esponential.

Close this window