domingo, 20 de septiembre de 2015

Learning Project Mariadb Tutorial (2): Creando las tablas

Learning Project Mariadb Tutorial (2): Creación de las tablas en SQL


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.

Con el editor Netbeans para bases de datos 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:



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.



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,...

Clave primaria (Primary key)

Con esto ya creamos nuestra tabla, ahoramos 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    


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.

Clave única (Unique constraint)

Lo que hacemos al definir una constante de este tipo, es definir una regla para impedir los valores duplicados, la documentación la puedes encontrar en MariaDB Constraint UNIQUE, aquí simplemente presentamos 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 attributes> ]
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)

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 la sintaxis es la siguiente:


CHECK <Table Constraint> ::= [ CONSTRAINT <Constraint name> ] CHECK (search condition) [ <constraint attributes> ] CHECK <Column Constraint> ::= [ CONSTRAINT <Constraint name> ] <Column name> CHECK (search condition) [ <constraint attributes> ] CHECK <Domain Constraint> ::= [ CONSTRAINT <Constraint name> ] CHECK (VALUE search condition) [ <constraint attributes> ]

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')), 


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







No hay comentarios :

Publicar un comentario