Continuamos el tutorial de MariaDB anteriormente habíamos configurado y preparado el entorno, finalizando la creación de la base de datos en Curso MariaDB – 1. Preparación del entorno. Para facilitar que puedas usar este ejemplo explicaré cada tabla en orden de creación con lo que copiando y ejecutando directamente en un script tendrías tu base de datos de ejemplo creada.

Implementamos el proyecto Learning Project en MariaDB explicando las tablas paso a paso

Código Xules

Con el editor DBeaver puedes crear las tablas directamente con el entorno gráfico que proporciona, pero esto lo veremos otro día, ahora nos vamos a centrar en la creación de las tablas directamente en la base de datos con SQL

Antes de empezar, aquí os presento el esquema real final de la base de datos que vamos a crear:

Curso Mariadb - Diagrama Entidad Relación (ER)
Curso Mariadb – Diagrama Entidad Relación (ER)

Lo que vamos ver

Creando la primera tabla cb_language

  1. Clave primaria (Primary key)
  2. Definición de las columnas
  3. Clave única (Unique constraint)
  4. Definiendo reglas con CHECK CONSTRAINT
  5. Comprobando la creación de la tabla: INSERT y SELECT

Creando la primera tabla cb_language

Vamos a definir como clave el campo idlanguage y en este caso no utilizamos un tipo AUTO INCREMENT (generación automática de un contador único), sino que como clave primaria usamos la codificación del idioma i18n e i10n, las principales: es_ES y en_EN, que serán las que se usarán por defecto.

Para completar la tabla de idiomas añadimos varios campos para definirlo como languageiso o countrycode , y otros que nos sirven para activar o no el idioma. En este caso partimos de la creación de la tabla completa y vamos a ir desgranando la estructura del lenguaje SQL para la creación de tablas:

CREATE TABLE cb_language
(
  idlanguage VARCHAR(6) NOT NULL COMMENT 'Como clave primaria usamos la codificación del idioma i18n e i10n, las principales: es_ES y en_EN, que serán las que se usarán por defecto.',
  namelanguage VARCHAR(60) NOT NULL COMMENT 'Nombre del idioma en el idioma por defecto del sistema (castellano).',
  isactive VARCHAR(1) NOT NULL DEFAULT 'N',
  languageiso VARCHAR(2),
  countrycode VARCHAR(2),
  isbaselanguage VARCHAR(1) NOT NULL DEFAULT 'N',
  issystemlanguage VARCHAR(1) NOT NULL DEFAULT 'N',
CONSTRAINT pk_cb_language PRIMARY KEY (idlanguage),
CONSTRAINT u_cb_language_namelanguage UNIQUE (namelanguage),
CONSTRAINT ch_cb_language_isactive_check CHECK (isactive IN ('Y', 'N')),
CONSTRAINT ch_cb_language_isbaselang_check CHECK(isbaselanguage IN ('Y', 'N')),
CONSTRAINT ch_cb_language_issysang_check CHECK (issystemlanguage IN ('Y', 'N'))
)
ENGINE = InnoDB
COMMENT='Como clave primaria usamos la codificación del idioma i18n e i10n, las principales: es_ES y en_EN, que serán las que se usarán por defecto.';
GRANT ALL ON TABLE cb_language TO xulescode;

En la web de MariaDB encontramos la documentación sobre CREATE TABLE SQL, la estructura para crear una tabla es la siguiente:

CREATE TABLE nombre_de_la_tabla(

	....

);

La sintaxis completa para CREATE TABLE sería:

CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...) [table_options    ]... [partition_options]
CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)] [table_options   ]... [partition_options]
    select_statement
CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
   { LIKE old_table_name | (LIKE old_table_name) }

Inicialmente, nos quedaremos con lo que vamos a necesitar que es la sintaxis básica de creación de la tabla y ver como creamos los índices, las columnas,…

1. Clave primaria (Primary key)

Una vez vista la sintaxis que engloba la creación de una tabla en SQL, veamos como definimos la clave primaria (primary key), en este caso lo indicamos con la estructura CONSTRAINT pk_cb_language PRIMARY KEY (idlanguage), aunque también se puede definir en el propio campo de la siguiente forma: idlanguage VARCHAR(6) NOT NULL PRIMARY KEY, en nuestro ejemplo quedaría así:

  • 1ª opción:
   CONSTRAINT pk_cb_language PRIMARY KEY (idlanguage)
  • 2ª opción:
   idlanguage VARCHAR(6) NOT NULL PRIMARY KEY

2. Definición de las columnas

La sintaxis para la definición de las columnas en MariaDB es la siguiente, y con ella puedes empezar a entender la creación de la primera tabla de nuestro proyecto:

create_definition:
    { col_name column_definition | index_definition | CHECK (expr) }

column_definition:
    data_type
      [NOT NULL | NULL] [DEFAULT default_value]
      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
      [COMMENT 'string']
      [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
      [reference_definition]
  | data_type [GENERATED ALWAYS] AS (expression) {VIRTUAL | PERSISTENT}
      [UNIQUE [KEY]] [COMMENT 'string']

Utilizamos la sintaxis arriba mencionada para crear nuestras columnas.

  idlanguage VARCHAR(6) NOT NULL COMMENT 'Como clave primaria usamos la codificación del idioma i18n e i10n, las principales: es_ES y en_EN, que serán las que se usarán por defecto.',
  namelanguage VARCHAR(60) NOT NULL COMMENT 'Nombre del idioma en el idioma por defecto del sistema (castellano).',
  isactive VARCHAR(1) NOT NULL DEFAULT 'N',
  languageiso VARCHAR(2),
  countrycode VARCHAR(2),
  isbaselanguage VARCHAR(1) NOT NULL DEFAULT 'N',
  issystemlanguage VARCHAR(1) NOT NULL DEFAULT 'N',

En este caso solo estamos definiendo un tipo de dato VARCHAR en el que con el valor entre paréntesis indicamos su longitud, otras referencias utilizadas son:

  • NOT NULL
    • Indicamos que el campo no puede quedar vacío, sino que tiene que tener un valor distinto de NULL.
  • COMMENT
    • Lo utilizamos para añadir un comentario a la columna explicando su significado.
  • DEFAULT
    • Para indicar un valor por defecto del campo.

3. Clave única (Unique constraint)

Utilizamos la definición de una clave única como complemento a la primary Key, es decir, cuando necesitamos que un valor sea único en la tabla definimos una constante de este tipo, la declaración de esta regla impede los valores duplicados del campo o los campos seleccionados, esta es la sintaxis básica:

UNIQUE Table Constraint
[ CONSTRAINT Constraint name ]
UNIQUE (Column name [ {,Column name }... ]) | UNIQUE (VALUE)
[ constraint attributes ] 

UNIQUE Column Constraint
[ CONSTRAINT Constraint name ]
Column name UNIQUE
[ constraint attribute ]

En nuestro caso ya tenemos definida una clave primaria para la tabla con la columna idlanguage, pero queremos que namelanguage, es decir, el nombre del idioma sea único en la tabla, y por ello necesitamos una clave única:

CONSTRAINT u_cb_language_namelanguage UNIQUE (namelanguage)
.

4. Definiendo reglas con CHECK CONSTRAINT

En este caso y para que sirva de ejemplo de utilización hemos dado unos valores por defecto para unos campos VARCHAR, que solo podrán tener esos valores. Para ello definimos una regla mediante CHECK CONSTRAINT.

Tenemos dos formas de aplicar la regla una a nivel de columna y otra a nivel general sobre la tabla, esta es la sintaxis:

  1. Añadimos en la columna la regla CHECK con la expresión que queramos:
<code>CHECK(expression)</code>&nbsp;given as part of a column definition. 

2. Otra opción es definir la regla CHECK al final de la tabla haciendo referencia a la columna o columnas objtos de la regla, tengamos en cuenta que la expresión puede tener en cuenta la otras columnas:

<code>CONSTRAINT [constraint_name] CHECK (expression)</code>

Para nuestro ejemplo, usamos la sintaxis para indicar que la columna isbaselanguage solo puede tener dos valores: Y y N, donde ch_cb_language_isbaselang_check es el nombre que le daríamos a la regla y CHECK(isbaselanguage IN (‘Y’, ‘N’)) es la configuración de la reglas en sí, este es resultado:

CONSTRAINT ch_cb_language_isbaselang_check CHECK(isbaselanguage IN ('Y', 'N')),

5. Comprobando la creación de la tabla: INSERT y SELECT

Vamos a comprobar que toda funciona bien realizando algunos INSERTS, está es la sintaxis SQL que utilizamos para añadir datos a la base de datos, veremos más adelante con detalle la sintaxis de INSERT y las diferente posibilidades, ahora simplemente para comprobar que está la tabla bien creada ejecuta estás sentencias SQL, lo puedes hacer por línea de comandos o desde el editor DBeaver, aquí puedes abrir un script y ejectura el SQL o abrir la tabla y en la parte de datos insertar varios registros comprobando que se cumplen las reglas definidas.

Estos son los INSERTS que utilizamos para añadir 4 idiomas a la tabla:

INSERT     INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode,  isbaselanguage, issystemlanguage ) 
         VALUES ('en_NZ', 'Y', 'English (New Zealand)', 'en', 'NZ', 'N', 'N' );
 INSERT INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode,  isbaselanguage, issystemlanguage ) 
         VALUES ('en_ZA', 'Y', 'English (South Africa)', 'en', 'ZA', 'N', 'N' );
 INSERT INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode,  isbaselanguage, issystemlanguage ) 
         VALUES ('es_AR', 'Y', 'Spanish (Argentina)', 'es', 'AR', 'N', 'N' );
 INSERT INTO cb_language( idlanguage, isactive, namelanguage, languageiso, countrycode,  isbaselanguage, issystemlanguage ) 
         VALUES ('es_BO', 'Y', 'Spanish (Bolivia)', 'es', 'BO', 'N', 'N' );

Para ver los resultados se utiliza SELECT en la siguiente lección veremos como es la sintaxis en detalle ahora simplemente ejecuta esta sentencia SQL:

SELECT * FROM cb_language;

Este es el resultado:

Curso Mariadb - SELECT sobre la tabla cb_language
Curso Mariadb – SELECT sobre la tabla cb_language

En DBeaver puedes consultar los datos visualmente, posicionándote sobre la tabla, con el botón izquierdo abrimos el menú sobre la tabla y seleccionamos la opcion VER TABLE esto nos abrirá una nueva pestaña donde seleccionamos el tab Datos :

Curso Mariadb - DBeaver - Ver Table cb_language
Curso Mariadb – DBeaver – Ver Table cb_language

Hasta aquí el segundo post del Curso MariaDB (1) (MySQL), próximamente en el siguiente post completaremos la creación de las tablas en nuestra base de datos.

MariaDB creando tablas

Espero que te haya sido útil

Código Xules