Bienvenida conceptos básicos y contexto histórico de las Bases de Datos

1

Bienvenida conceptos básicos y contexto histórico de las Bases de Datos

Introducción a las bases de datos relacionales

2

Historia de las bases de datos relacionales

3

Entidades y atributos

4

Entidades de Platzi Blog

5

Relaciones

6

Múltiples muchos

7

Diagrama ER

8

Diagrama Físico: tipos de datos y constraints

9

Diagrama Físico: normalización

10

Formas normales en Bases de Datos relacionales

11

Diagrama Físico: normalizando Platziblog

RDBMS (MySQL) o cómo hacer lo anterior de manera práctica

12

¿Qué es RDB y RDBMS?

13

Instalación local de un RDBMS (Windows)

14

Instalación local de un RDBMS (Mac)

15

Instalación local de un RDBMS (Ubuntu)

16

Clientes gráficos

17

Servicios administrados

SQL hasta en la sopa

18

Historia de SQL

19

DDL create

20

CREATE VIEW y DDL ALTER

21

DDL drop

22

DML

23

¿Qué tan standard es SQL?

24

Creando Platziblog: tablas independientes

25

Creando Platziblog: tablas dependientes

26

Creando Platziblog: tablas transitivas

Consultas a una base de datos

27

¿Por qué las consultas son tan importantes?

28

Estructura básica de un Query

29

SELECT

30

FROM

31

Utilizando la sentencia FROM

32

WHERE

33

Utilizando la sentencia WHERE nulo y no nulo

34

GROUP BY

35

ORDER BY y HAVING

36

El interminable agujero de conejo (Nested queries)

37

¿Cómo convertir una pregunta en un query SQL?

38

Preguntándole a la base de datos

39

Consultando PlatziBlog

Introducción a la bases de datos NO relacionales

40

¿Qué son y cuáles son los tipos de bases de datos no relacionales?

41

Servicios administrados y jerarquía de datos

Manejo de modelos de datos en bases de datos no relacionales

42

Top level collection con Firebase

43

Creando y borrando documentos en Firestore

44

Colecciones vs subcolecciones

45

Recreando Platziblog

46

Construyendo Platziblog en Firestore

47

Proyecto final: transformando tu proyecto en una db no relacional

Bases de datos en la vida real

48

Bases de datos en la vida real

49

Big Data

50

Data warehouse

51

Data mining

52

ETL

53

Business intelligence

54

Machine Learning

55

Data Science

56

¿Por qué aprender bases de datos hoy?

Bonus

57

Bases de datos relacionales vs no relacionales

58

Elegir una base de datos

Diagrama Físico: tipos de datos y constraints

8/58
Recursos

Para llevar a la práctica un diagrama debemos ir más allá y darle detalle con parámetros como:

Tipos de dato:

  • Texto: CHAR(n), VARCHAR(n), TEXT
  • Números: INTEGER, BIGINT, SMALLINT, DECIMAL(n,s), NUMERIC(n,s)
  • Fecha/hora: DATE, TIME, DATETIME, TIMESTAMP
  • Lógicos: BOOLEAN

Constraints (Restricciones)

  • NOT NULL: Se asegura que la columna no tenga valores nulos
  • UNIQUE: Se asegura que cada valor en la columna no se repita
  • PRIMARY KEY: Es una combinación de NOT NULL y UNIQUE
  • FOREIGN KEY: Identifica de manera única una tupla en otra tabla
  • CHECK: Se asegura que el valor en la columna cumpla una condición dada
  • DEFAULT: Coloca un valor por defecto cuando no hay un valor especificado
  • INDEX: Se crea por columna para permitir búsquedas más rápidas

Aportes 315

Preguntas 75

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Aqui se explico algo muy importante sobre el ahorro de memoria a la hora de poner el diagrama de la base de datos en el mundo real (En el motor de base de datos ya sea SQLSERVER o Oracle). El Char sirve para declarar un campo rigido de disco que vamos a ocupar y el varchar puede cambiar la longitud dependiento del largo de los datos que metamos en el. Seguramente esten pensando que lo mejor es un varchar para todo ya que es dinamico. Pero que el motor de base de datos haga los procesos de calcular la nueva longitud de cada dato del tipo varchar que ingresemos nos puede dar problemas de rendimiento. Si estamos seguros que un dato solo ocupara un char de 5 ocupemos un char de 5. Estas son algunas de las buenas practicas que se debe tener para el funcionamiento de un motor de base de datos.

Tipos de datos:

Todo diagrama tiene detallado cada uno de sus parámetros, y estos son tipos de datos que se dividen en secciones diferentes, las cuales son:
1. Tipos de datos de texto:
Char(n) Permite almacenar caracteres y cadenas de texto.
Este tipo de dato reserva un espacio de memoria del número de caracteres que va a ser ocupado.
Varchar(n) Al igual que char, este reserva espacio en la memoria. Su diferencia radica en que este reserva un mínimo espacio de memoria, y a partir de esta va creciendo o encogiéndose, es eficiente cuando desconocés cual será el tamaño de tu cadena de texto (Su limite es de 255 caracteres).
Text Su función es guardar cadenas de texto que sean muuuuuy grandes.

2. Tipos de datos numéricos:

Integer Número que no tiene punto decimal, se usa para declarar un tipo de dato entero que puede ser usado para hacer operaciones.?Al usar este tipo de dato nuestra base de datos sabrá que estamos hablando de número y no solo de un simple carácter.
Bigint Es un subtipo de integer, nos sirve para declarar números muy grandes.
Smallint Subtipo de integer, nos para declarar números muy pequeños (99 o menos).
Decimal (n, s)?Numeric (n, s) Tiene dos parámetros (n y s, en este ejemplo). La primera entrada es para números enteros, y la segunda entrada es para números decimales.?Nos sirve para hacer operaciones mas precisas.

3. Tipos de datos de fecha y hora: 

Esta clase de tipos de datos es muy peculiar ya que nos ayuda internamente a tener una bitácora de nuestra base de datos.
Date Solo contiene la fecha (año, mes y día).
Time Solo contiene la hora.
Datetime Es una mezcla de los dos primeros, contiene fecha y hora.
Timestamp Es el número de segundos que ha transcurrido desde que tu archivo fue creado.?En otras palabras, podría decirse que es un medidor de tiempo.

4. Tipos de datos lógicos:

Boolean Este solo puede tener dos valores, funciona como un tipo de dato binario.?Es usado de manera discriminatoria para hacer validaciones.

Constraints (Restricciones):

Los contraints o restricciones son los tipos de reglas que vas a permitir que tenga tu base de datos.
Para ello usamos las siguientes:
Not null Se asegura que tu columna no tenga valores nulos.
Unique Asegura que cada valor en tu columna no se repita.
Primary Key Es una etiqueta muy importante, es una combinación entre not null y unique.?Nos permite hacer relaciones entre distintas entidades.
Foreign Key Llave foránea, es el otro lado de una primary key, cuando queremos juntar dos tablas y decir que estan relacionadas entre si, lo que va a suceder es la primary key de una de las tablas se añadirá como foreign key de la otra.
Check Algunas bases de datos removieron este tipo de contraints, pero las que lo conservan son muy potentes.?Tiene la función de permitir que añadamos las reglas que queramos a nuestra base de datos.
Index Se crea por columna, su función es hacer búsquedas con mayor rapidez.?Su única desventaja es que suele volverse lenta cada vez que se añaden nuevos registros.

Diferencia entre NUMERIC y DECIMAL:

NUMERIC debe ser exactamente tan preciso como está definido, de modo que si define 4 posiciones decimales, la database siempre debe almacenar 4 decimales.

DECIMAL debe ser al less tan preciso como se define. Esto significa que la database puede almacenar más dígitos que los especificados (debido a que el espacio de almacenamiento detrás de escena tiene espacio para dígitos adicionales). Esto significa que la database podría almacenar 1.00005 lugar de 1.0000 , lo que afectaría los cálculos futuros.

Link: http://sql.dokry.com/diferencia-entre-decimal-y-numeric.html

Probando

Si alguien tuvo la misma duda que yo cuando leyó en FOREIGN KEY
que puso “identifica de manera única una **tupla **en otra tabla”

tupla: Según la WikiPedia en su definición general dice que en matemáticas, una tupla, es una lista ordenada de elementos. Una n-tupla es una secuencia (o lista ordenada) de n elementos, siendo n un número natural (entero no-negativo).
En las ciencias de la computación una tupla puede tener dos significados distintos. Generalmente en los lenguajes de programación funcional y en otros lenguajes de programación, una tupla es un objeto que bien puede tener datos o diversos objetos, de forma similar a una tupla definida matemáticamente.

Tipos de dato numéricos
Listado de cada uno de los tipos de dato numéricos en MySQL, su ocupación en disco y valores.

INT (INTEGER): Ocupación de 4 bytes con valores entre -2147483648 y 2147483647 o entre 0 y 4294967295.
SMALLINT: Ocupación de 2 bytes con valores entre -32768 y 32767 o entre 0 y 65535.
TINYINT: Ocupación de 1 bytes con valores entre -128 y 127 o entre 0 y 255.
MEDIUMINT: Ocupación de 3 bytes con valores entre -8388608 y 8388607 o entre 0 y 16777215.
BIGINT: Ocupación de 8 bytes con valores entre -8388608 y 8388607 o entre 0 y 16777215.
DECIMAL (NUMERIC): Almacena los números de coma flotante como cadenas o string.
FLOAT (m,d): Almacena números de coma flotante, donde ‘m’ es el número de dígitos de la parte entera y ‘d’ el número de decimales.
DOUBLE (REAL): Almacena número de coma flotante con precisión doble. Igual que FLOAT, la diferencia es el rango de valores posibles.
BIT (BOOL, BOOLEAN): Número entero con valor 0 o 1.
Tipos de dato con formato fecha
Listado de cada uno de los tipos de dato con formato fecha en MySQL, su ocupación en disco y valores.

DATE: Válido para almacenar una fecha con año, mes y día, su rango oscila entre ‘1000-01-01′ y ‘9999-12-31′.
DATETIME: Almacena una fecha (año-mes-día) y una hora (horas-minutos-segundos), su rango oscila entre ‘1000-01-01 00:00:00′ y ‘9999-12-31 23:59:59′.
TIME: Válido para almacenar una hora (horas-minutos-segundos). Su rango de horas oscila entre -838-59-59 y 838-59-59. El formato almacenado es ‘HH:MM:SS’.
TIMESTAMP: Almacena una fecha y hora UTC. El rango de valores oscila entre ‘1970-01-01 00:00:01′ y ‘2038-01-19 03:14:07′.
YEAR: Almacena un año dado con 2 o 4 dígitos de longitud, por defecto son 4. El rango de valores oscila entre 1901 y 2155 con 4 dígitos. Mientras que con 2 dígitos el rango es desde 1970 a 2069 (70-69).
Diferentes tipos de dato con formato string
Listado de cada uno de los tipos de dato con formato string en MySQL, su ocupación en disco y valores.

CHAR: Ocupación fija cuya longitud comprende de 1 a 255 caracteres.
VARCHAR: Ocupación variable cuya longitud comprende de 1 a 255 caracteres.
TINYBLOB: Una longitud máxima de 255 caracteres. Válido para objetos binarios como son un fichero de texto, imágenes, ficheros de audio o vídeo. No distingue entre minúculas y mayúsculas.
BLOB: Una longitud máxima de 65.535 caracteres. Válido para objetos binarios como son un fichero de texto, imágenes, ficheros de audio o vídeo. No distingue entre minúculas y mayúsculas.
MEDIUMBLOB: Una longitud máxima de 16.777.215 caracteres. Válido para objetos binarios como son un fichero de texto, imágenes, ficheros de audio o vídeo. No distingue entre minúculas y mayúsculas.
LONGBLOB: Una longitud máxima de 4.294.967.298 caracteres. Válido para objetos binarios como son un fichero de texto, imágenes, ficheros de audio o vídeo. No distingue entre minúculas y mayúsculas.
SET: Almacena 0, uno o varios valores una lista con un máximo de 64 posibles valores.
ENUM: Igual que SET pero solo puede almacenar un valor.
TINYTEXT: Una longitud máxima de 255 caracteres. Sirve para almecenar texto plano sin formato. Distingue entre minúculas y mayúsculas.
TEXT:Una longitud máxima de 65.535 caracteres. Sirve para almecenar texto plano sin formato. Distingue entre minúculas y mayúsculas.
MEDIUMTEXT:Una longitud máxima de 16.777.215 caracteres. Sirve para almecenar texto plano sin formato. Distingue entre minúculas y mayúsculas.
LONGTEXT: Una longitud máxima de 4.294.967.298 caracteres. Sirve para almecenar texto plano sin formato. Distingue entre minúculas y mayúsculas.

Texto:
CHAR(n): Toma un pedazo de memoria para el numero de caracteres a guardar.
VARCHAR(n): Reserva un mínimo espacio de memoria y este lo incrementa o disminuye, para permitirte guardar cadenas mas grandes o mas chicas, con un máximo de 255 caracteres.
TEXT: Utilizado para guardar cadenas mayores a 255 caracteres.
Números:
INTEGER: Entero, no tiene número decimal.
Subtipos:
BIGINT: Para números muy grandes 99 ó mas.
SMALLINT: Para números pequeños 99 o menos.
DECIMAL(n,s)
N: numero
S: decimales del numero
NUMERIC
Fecha/hora
DATE: fecha
TIME: hora
DATETIME: fecha y hora
TIMESTAMP: fecha y hora
Lógicos:
BOOLEAN: True o False

Solo una cosa por agregar, en algunas bases de datos se maneja otro tipo de dato numérico TINYINT o BYTEINT que es un tipo de dato mas pequeño que el SMALLINT =)

DATA TYPES
![](

Tipos de datos en BB.DD
Texto:

  • CHAR(n)

La diferencia entre CHAR y VARCHAR es que originalmente CHAR guardaba el espacio de caracteres que le asignaras, no importaba si lo utilizabas o no (ocupando siempre la misma memoria). En cambio, VARCHAR, aunque también pedía un espacio mínimo, dependiendo si lo utilizabas o no, aumentaba o disminuía (ocupando solo la memoria que necesitas)

  • VARCHAR(n) En el paréntesis se escribe el número de caracteres a utilizar, en caso de que no se tenga claro, se puede dejar por defecto, permitiendo una máx. de 255 caracteres.

  • TEXT También se utiliza para texto, pero una gran cantidad de caracteres.

Numérico:
Nos ayudan a guardar números, duhh. También se podría pensar que los números podrían ser almacenados en datos de tipo texto, pero no… No almenos si quieres operar (Sumarlos, multiplicar, restar…)

  • INTENGER: Para guardar números enteros.

(SUBTIPOS)

  • BIGINT (Tiene una función similar a la INTERGER, pero la utilizamos cuando sabemos que necesitamos trabajar con números muy grandes)
  • SMALLINT (Tiene una función similar a la INTERGER, pero la utilizamos cuando sabemos que necesitamos trabajar con números “pequeños”)
    En este enlace de Microsoft publica cuando utilizar cada uno en SQL Microsoft
  • DECIMAL (n, s) Es un tipo de dato al cual se le pueden pasar dos valores, siendo “n” el número con decimales, y “s” la cantidad de decimales que queremos que almacene

Fecha y hora:
Este tipo de datos son muy interesantes, ya que nos permiten guardar información de cada evento de tiempo.

  • DATE Año, mes y día.

  • TIME La hora del día de las 24h.

  • DATETIME Obtiene los dos anteriores

Lógico:

  • BOOLEAN Solo puede guardar dos valores (BINARIO) 1 o 0, vivo o muerto, verdad o falso, encendido o apagado.

Otro parámetro sumamente importante son los constraints o restricciones, que son otro tipo de regla para la información que van a guardar nuestros atributos.

NOT NULL: Exige que el campo no se quede vacío, es decir que no tenga valores nulos.
UNIQUE: Se asegura que cada valor en la columna no se repita.
PRIMARY KEY: Es una combinación entre NOT NULL & UNIQUE.
FOREING KEY: Nos permite relacionar las tablas, es el identificador de una entidad en otra. (foránea= de afuera, externa)
CHECK: Se asegura que se guarden registros que cumplan una condición.
DEFAULT: Cuando no se llena el campo, se asigna un valor por defecto (no), y cuando queremos que tenga otro valor, utilizamos esta constraint.
INDEX: Se crea un sistema de búsqueda más eficiente, el problema es que cada vez que se agregan datos, tiene que re indexar todos los registros, pero es muy útil cuando se necesita consultar muchas veces la BB.DD

También existe AUTO_INCREMENT, un atributo o constraint (dependiendo de donde se vea) que es utilizado en índices númericos (llaves primarias), para que cada vez que se inserte un nuevo objeto o fila de datos, su id o índice sea incrementado en 1 automaticamente.

Les comparto mi Mapa mental de Tipos de Datos

Información importante: Existe la posibilidad de duplicar el limite positivo de cada valor si al tipo de dato le aplicamos la propiedad UNSIGNED, por ejemplo el tipo de dato númerico TinyInt tiene un valor mínimo negativo de -128 y un valor máximo positivo de 127, ahora si sabemos que ese tipo de dato nunca va almacenar un valor negativo significa que TinyInt tendría un valor positivo máximo de 255.

TIPOS DE DATOS
TEXTO:
CHAR(n) Almacena caracteres en cadenas optimiza el uso de memoria , Separa memoria los campos que se van a usar siempre fijo ejemplo
tienen una cadena de 8 caracteres y solo 8 caracteres siempre 8 caracteres, ya queda separado

VARCHAR(n) utiliza de manera dinámica la memoria, crece o se achica es útil cuando no se conoce el numero de caracteres, tiene un limite de 255 caracteres

cuando se requiere reservar mas de 255 se usa el tipo de texto
TEXT

NÚMEROS
INTEGER Entero

BIGINT numero muy grande
SMALLINT cunado es menor a 99

DECIMAL (n.s) numero entero, números decimales ideal par monedas o fraccionarios

FECHA y HORA: Permite manejar fechas de publicacion y registro de edición de archivos

DATE solo tiene año mes día
TIME hora del día 24 horas
DATETIME Día hora minutos segundos

LÓGICO
solo tiene el tipo BOOLEANO es binario 1 o 0 es falso o verdadero
es Si o NO

(En MySQL) **TIMESTAMP ** almacena la zona horaria actual en formato UTC (zona horaria universal), y para recuperarlo, este dato se actualiza con su correspondiente zona horaria sea igual o diferente. (Esto no ocurre para otros tipos, como DATETIME)

**Pregunta de examen: **
Diferencia original entre char y varchar
(https://platzi.com/clases/1566-bd/20202-diagrama-fisico-y-tipos-datos-y-constraints0863/?time=110)

Aquí pueden leer más sobre la diferencia entre Datatime y Timestamp.

Por otra parte, mis apuntes hasta esta clase. Espero les sirva.

investigando encontre que en el estandar SQL-92 NUMERIC y DECIMAL tienen que estar dentro de una escala escogida, y la diferencia entre uno y otro es la precision que le asignemos.
En NUMERIC la precision es exactamente la declarada.
En DECIMAL la precision es al menos la declarada.
Por lo tanto en este estandar NUMERIC es mas estricto que DECIMAL.
Si quieren leer un poco mas acerca de esto y ver como funciona en firebirdSQL pueden revisar este link https://firebird21.wordpress.com/2013/05/17/usando-numeric-y-decimal/

Tipos de dato:
Los tipos de datos de una base de datos pueden ser: Texto, Numeros, Fecha y Logicos.
Datos de tipo Texto.
CHAR(n): Permite almacenar Caracteres.
VARCHAR(n): Tambien permite almacenar caracteres, a diferencia de CHAR es que la longitud de caracteres es variable, a diferencia de la anterior que es de longitud fija y serviría mas para cadenas cortas de texto.
TEXT: Tambien sirve para almacenar caracteres, a diferencia de los 2 anteriores, funciona para guardar cadenas que sean mayores a 255 caracteres.

Datos de tipo Numero
INTEGER: Sirve para almacenar números de tipo entero (no decimales).
BIGINT: Tiene la misma funcionalidad que el anterior, pero para números de cantidades grandes.
SMALLINT: Igual que el anterior, pero para números pequeños.
DECIMAL(n, s): Funciona para números decimales. Lo primero es el numero (n) y lo siguiente sería el decimal (s).
NUMERIC(n, s): Funciona también para decimales, a diferencia del anterior, se deben definir los decimales que se especifiquen en (s).

Tipos de dato Fecha/hora
DATE: Solo especifica la fecha, es decir, año, mes y dia.
TIME: Solo se especifica la hora.
DATETIME: Especifica fecha y hora.
TIMESTAMP: Funciona de manera similar a DATETIME.

Datos de tipo lógico
BOOLEAN: El tipo de dato booleano solo tiene 2 datos, que seria 1 o 0 (verdadero o falso).

Constraints
Los Constraints (o restricciones), nos permiten especificar la integridad que deben tener ciertos tipos de datos en las entidades.

ÍNDICES: Los índices proporcionan un acceso eficaz a los datos de tabla, pero pueden necesitar de proceso adicional cuando se modifican los datos de una tabla.

Puede crear índices para aplicar la exclusividad. También puede optar por utilizar índices debido a los requisitos de acceso.

La utilización de índices implica un intercambio. Un mayor número de índices puede mejorar simultáneamente el rendimiento de una transacción determinada y necesitar proceso adicional para insertar, actualizar y suprimir claves de índice.

Después de crear un índice, DB2 mantiene el índice, pero puede realizar el mantenimiento necesario como, por ejemplo, su reorganización o recuperación, según convenga.

Tipos de índices
En DB2 para z/OS, puede crear varios tipos diferentes de índices. Considere detenidamente el tipo o los tipos que se adaptan mejor a sus datos y aplicaciones.
Cómo pueden ayudar los índices a evitar clasificaciones
DB2 puede utilizar índices para evitar clasificaciones al procesar consultas con la cláusula ORDER BY.
Claves de índice
La utilidad de un índice depende del diseño de su clave, que se define cuando se crea el índice.
Atributos de índices generales
Normalmente el tipo de índice que debe definirse se determina después de definir un espacio de tablas. Un índice puede tener numerosos atributos diferentes.
Atributos de índices XML
Puede crear un índice en cualquier columna XML para una evaluación eficaz de expresiones XQuery con el fin de mejorar el rendimiento de consultas en documentos XML.
Índices en tablas particionadas
Los siguientes tipos de índices solo se aplican a tablas particionadas: índices particionados, índices de particionamiento (PI), índices secundarios con particiones de datos (DPSI) e índices secundarios no particionados (NPI o NPSI).

https://www.ibm.com/support/knowledgecenter/es/SSEPEK_10.0.0/intro/src/tpc/db2z_typesofindexes.html
https://www.youtube.com/watch?v=k7oankZVZ3Q

Di este curso a dos niveles en mi universidad y jamás me habían mostrado el cuadro de constraints, no sabía que existía, esto si que fue una buena inversión

  • Char: toma un pedazo de memoria del número de caracteres que se van a guardar y reservarlo para que solo eso lo pueda ocupar.
    .
  • Varcahar: hace lo mismo pero de manera dinámica, es decir el solo va a tomar espacio de la memoria que necesite dependiendo del tamaño de la cadena.

Conceptos relevantes de la clase:
-CHAR: almacenamiento de cadenas de caracteres.
-VARCHAR: almacenamiento de cadenas de caracteres con mayor dinamismo, para cuando no conocemos con exactitud el tamaño de las cadenas de texto que queremos introducir.
TIPOS DE DATOS
-TEXT: almacenamiento de grandes cadenas de caracteres.
-INTEGER: números sin decimales.
-BIGINT: números enteros de gran tamaño.
-SMALLINT: números enteros de mínimo tamaño.
-DECIMAL: almacena números con parte decimal.
-NUMERIC: mismo funcionamiento que DECIMAL.
-LÓGICOS: validaciones por medio de booleanos.
-DATE: soporta datos de AÑO/MES/DÍA.
-TIME: guarda datos de HORA DEL DÍA.
-DATETIME y TIMESTAMP: combina DATE+TIME.
CONSTRAINTS
-NOT NULL: no admite valores nulos.
-UNIQUE: no admite valores repetidos.
-PRIMARY KEY: combinación de NOT NULL + UNIQUE.
-FOREIGH KEY: tupla de otra tabla.
-CHECK: evalúa si se cumple una condición.
-DEFAULT: otorga un valor por defecto.
-INDEX: permite búsquedas más ágiles. Útil cuando se requieren lecturas frecuentes, sin escritura constante de datos.

Excelente clase. Cada concepto muy bien explicado. Hay que llevarlo a la práctica.

Les comparto mi Mapa mental de Constraints

A pesar de que el profesor es querido, y sí voy entendiendo, el curso tiene muchos vacíos y me ha tocado buscar un montón en google, lo cual no me deja avanzar mucho en el tiempo (platz:todas las plazas tiene un rejoj) No especificó diferencia entre datetime y timestamp. Estos es relevante por ejemplo para quienes hacemos este curso porque queremos ser growth hackers. El timestamp es relevante para enterder data de google analytics con respecto al lenguaje corporal de los usuarios.
<br><br>
TIMESTAMP: también se utiliza para valores que contienen partes de fecha y hora, e incluye la zona horaria. TIMESTAMP tiene un rango de 1970-01-01 00:00:01UTC a 2038-01-19 03:14:07UTC.

UNIQUE= me funciona para numero de identidad, consecutivos, numero telefonicos y siendo creativos podria utilizarlos para codigos?

¿Si necesito tener un conjunto de datos? Por ejemplo tengo un atributo “Imagenes” donde aquí almaceno varias imagenes, como se guardaría?

TEXTO
CHAR(n) : guardar un numero especifico de caracteres.
VARCHAR(n) : guardar de manera dinámica una cadena de caracteres con min y max de espacio de memoria CON LIMITE DE 255.
TEXT : almacenar cadenas de caracteres muy grandes.

NÚMEROS
INTEGER : almacenar enteros
BIGINT : sub tipo de integer que sirve para almacenar números muy grandes.
SMALLINT : sub tipo de integer para almacenar números pequeños
DECIMAL(n, s) : recibe dos tipos de valores n = numero, s = decimales
NUMERIC(n, s) : funciona igual que decimal

FECHA/HORA
DATE : contiene la fecha
TIME : contiene la hora del día
DATETIME Y TIMESTAMP : guardan tanto fecha como hora con mucha precisión (como horas con mili segundos)

LÓGICO
BOOLEAN : solo tiene dos valores (binario), nos sirve para hacer una discriminación de datos.

¿cuál es la diferencia entre datetime y timestamp?

Pienso que faltó especificar las diferencias entre un diagrama lógico, físico y conceptual. Vi que es distinto en cada caso pero que cumplen cierta regla de simplicidad vs complejidad.

Check son los captcha , solo permitir entrar a humanos ;v

Una tupla es un registro o fila dentro de la tabla 😉

Al fin una explicación certera y simple de los Constraints, en la universidad no te suelen enseñar ese tema, únicamente llaves primarias y foráneas, para "relaciones"
Gracias por la explicación profesor.

¿Que diferencia existe entre Datetime y Timestamp?

mucha teoria ya, manos a la obra

<h1>Tipos de datos y restricciones mediante Diagramas físicos</h1>

Tipos de dato:

Texto

CHAR(n): Permite almacencar cadenas de texto:
VARCHAR(n): Almance cadenas de texto. La diferencia entre ambas, es que CHAR toma un pedazo de memoria del número de carácteres que vas a tomar. Sin embargo, VARCHAR reserva un mínimo espacio en memoria y se iba a acoplando dinámicamente dependiendo del registro.
TEXT: Almacena cadenas de texto muy grandes, generalmente superiores a 255 caractéres.

Numérico

INTEGER: Número sin fracción
BIGINT: Número entero para grandes números
SMALLINT: Número entero para pequeños números, inferiores a 1000 o 100
DECIMAL:
NUMERIC: Ambos permiten especificar longitudes decimales.

Fecha/Hora

DATE: Especifica fecha en día
DATETIME: Especifica hora del día
DATETIME:
TIMESTAMP: Son marcas de tiempo que permiten especificar día y hora de algún evento

Lógicos

BOOLEAN: Solo permite dos valores, es binario. Por ejemplo, activo o inactivo.

Restricciones:

NOT NULL: Se asegura que la columna no tenga valores nulos.
UNIQUE: Se asegura que cada valor en la columna no se repita.
PRIMARY KEY: Combinación de NOT NULL y UNIQUE. Por otro lado, es la columna que permite la unión entre dos tablas.
FOREIGN KEY: Llave que viene de otra tabla.
CHECK: Asegura que el valor en la columna cumpla una condición dada.
DEFAULT: Coloca un valor por defecto cuando no hay un valor especificado.
INDEX: Se crea por columna para permitir búsquedas más rápidas (Desventaja cuando la base de datos se actualiza constantemente)

Not null: no la puedo dejar en blanco
Unique: solo puede existir una de estas
Primary Key: una combinacion de las dos anteriores, es unica y no puede estar en blanco
Foreign Key sirve para relacionar tablas
Check valor cumpla condicion dad
Default Coloca valor por defecto
Index permite indexar

Viniendo del curso de git y github con freddie, realmente siento que a este curso le hace falta que faciliten la presentación que utiliza el profesor, o por lo menos las imágenes con la información mas importante.

esta ha sido la mejor clase hasta el momento.

¿Qué pasaría si yo quiero aceptar datos nulos? en caso de que no fueran llenados porque son opcionales.
¿Qué constraint debería de poner?

Aquí dejo un link donde se explica más a detalle la diferencia entre los tipos de datos NUMERIC y DECIMAL. Básicamente en Numeric la cantidad de números totales permitidos es exactamente la indicada en n y s es la cantidad de decimales de este número. Por ejemplo si declaro un NUMERIC(5,2) esto quiere decir que puedo tener un número de máximo 5 digitos y de esos 5 digitos 2 son decimales. Cual es la diferencia con decimal? DECIMAL a pesar de que hay que declarar ambos parametros, tanto n como s. DECIMAL solo es estricto con la acantidad de decimales, pero la cantidad de digitos es que puede guardar es la maxima que puede usar el INTEGER . Entonces Simplificando un poco en un dato NUMERIC(4,2) el máximo número que se puede guardar es 99,99 y el mínimo -99,99 pero en un DECIMAL(4,2) el máximo número 214.748.364,7 y el menor número permitido es -214.748.364,8.

NUMERICvsDECIMAL

Apenas inician este curso. Ya lo estoy viendo por segunda vez porque creanme, es uno de los mejores en Platzi. 😃🥳
Aprenderan muchisimo. Y cada cosa que el maestro se esfuerza en explicarnos vale oro, y nos salvará en la vida real. ❤️❤️❤️

Excelente clase, hasta hora todo se ha entendido perfectamente!

like si tambien lo ves en 1.25x jajaja

Siempre había visto las restricciones check, default y index pero no entendía muy bien de para que servían y como las podía implementarlas en mis proyectos

No lo indican pero según leí, la diferencia entre NUMERIC y DECIMAL, es:
La diferencia entre ambos tipos de datos es en la forma en la cual la precisión es restringida. Cuando el tipo de dato es NUMERIC, la precisión es exactamente la declarada. En cambio, cuando el tipo de datos es DECIMAL la precisión es al menos igual a la declarada. Eso significa que NUMERIC es más estricto que DECIMAL.

Este es el diagrama de un programa que funciona actualmente basado en access, pero me parece que es muy similar.

Hola, tengo una duda existencial jaja. Al contar con un indice en una tabla, la base de datos se vuelve a indexar cierto? Pero, si mi indice es una clave primaria autoincrementable? la vuelve a indexar? o se ahorra dicho proceso?

En una tabla libros, yo indexaría la columna titulo, puesto que los clientes estarán buscando los títulos de los libros con frecuencia. Si bien se registran constantemente, en un website también se estarán buscando constantemente.
Que opinan.?

Interesante el tipo de dato varchar, ya que variará la longitud dependiento del largo de los datos que metamos en él. Se hace como una analogía a las listas (mutables) y tuplas(inmutables) en python.

Buenas noches chicos/as!

Aquí algo súper interesante con respecto a las diferencias de un DATETIME y el TIMESTAMP.

*DATETIME: Es un tipo de dato que devuelve fecha y hora en el siguiente formato: AAAA-MM-DD HH: MM: SS’. Se recomienda utilizar este tipo cuando únicamente requieres obtener valores específicos.

*TIMESTAMP: Es un tipo de dato que trabaja bajo el formato ‘1970-01-01 00:00:01’ GMT a ‘01/09/2038 03:14:07’ GMT y se lo utiliza para dar seguimiento a los cambios que fueron efectuados en alguna entidad de su base de datos.

Aquí la documentación al respecto:
https://dev.mysql.com/doc/refman/5.7/en/datetime.html
Suerte!

Los tipos de datos CHAR y VARCHAR se definen en términos de bytes, no de caracteres. Una columna CHAR solo puede contener caracteres de un byte, por lo que una columna CHAR(10) puede contener una cadena con una longitud máxima de 10 bytes. Un VARCHAR puede contener caracteres multibyte de hasta un máximo de cuatro bytes por carácter. Por ejemplo, una columna VARCHAR(12) puede contener 12 caracteres de un byte, 6 caracteres de dos bytes, 4 caracteres de tres bytes o 3 caracteres de cuatro bytes.

TIPOS DE DATOS:
**§ TEXTO: **
□ CHAR: PERMITE ALMACENAR CADENAS (8 CARACTERES)
□ VARCHAR: PERMITE ALMACENAR CADENAS (DINAMICO / MINIMO ESPACIO DE MEMORIA Y
TAMAÑO VARIABLES.) 255 CARACTERES.
□ TEXT: PARA ALMACENAR CADENAS DE TEXTO GRANDES. (1500 A 2500 CARACTERES.)
§ NUMERICO:
□ INT: SIN PUNTO DECIMAL O FRACCION.
□ BIGINT: NUMEROS GRANDES
□ SMALL INT: 99 0 MENOS SMALL INT.
□ DECIMAL: RECIBE 2 PARAMETROS EL NUMERO Y LOS DECIMALES(N,S)
□ NUMERIC: RECIBE 2 PARAMETROS EL NUMERO Y LOS DECIMALES (N,S)

- § FECHA Y HORA:
□DATE: SOLO LA FECHA DD/MM/YY
□TIME: LAS 24 HORAS DEL DIA
□DATETIME: LA FECHA MAS LA HORA DEL DIA CON MILISEGUNDOS.
□TIMESTAMP:LA FECHA MAS LA HORA DEL DIA CON MILISEGUNDOS.
§ LOGICO:
□BOOLEANO: DATOS BINARIOS (TRUE O FALSE) ACTIVO O INACTIVO.

++RESTRICCIONES: ++
(REGLAS A QUE TIPO DE DATOS PODEMOS INGRESAR EN LA BASE DE DATOS.)
○ NOT NULL: LA COLUMNA SE ASEGURA DE QUE NO TENGA DATOS NULOS.(DATOS OBLIGATORIOS)
○ UNIQUE: DATOS UNICOS EN LA TABLA (DNI- CEDULA- ID)
○ PRIMAY KEY: ES COMBINACION DE UNIQUE Y NOT NULL- LLAVE PRIMARIA- IDENTIFICADOR
DEL REGISTRO EN LA TABLA. (NOS AYUDA A LA UNION ENTRE UNA ENTIDAD Y OTRA.)
○ FOREING KEY: La primary key de una tabla de une a la otra entidad.(Las mismas características
de la primary key, pero no tiene que ser unica. Ya que se puede repetir.)
○ CHECK: Permite hacer reglas para las bases de datos (Asegura que se cumpla una condición
dada.)
○ DEFAULT: Coloca un valor por defecto o no especificado.(Puede que no admitas un valor puedes
reemplazarlo con un carácter si no deseas que sea nulo el carácter)
○ INDEX: Permite hacer búsquedas en la tabla de bases de datos / si tienes un nuevo registro se
vuelve a indexar la bdd.

Diferencia entre CHAR y VARCHAR


  • CHAR: Reservan un mínimo espacio de memoria para el dato. Cadena de caracteres con tamaño declarado.
  • VARCHAR: Reservan un mínimo espacio de memoria de forma dinámica.

Resumen de la clase:

Tipo de datos:

    • Texto*: Char(n), Varchar(n), Text.
    • Números*: Integer, Bigint, Smallint, Decimal(n,s), Numeric(n,s)
    • Fecha/Hora*: Date, Time, Datetime, Timestamp.
    • Lógicos*: Boolean

Constrains o restricciones

  • Not null.
  • Unique.- Por ejemplo el email de un usuario.
  • Primary key.
  • Foreing Key.
  • Check.- Nos permite definir una regla.
  • Defauklt.- Si no queremos que sea Not Null, así podemos definir un valor.
  • Index.- Tiene su ventaja cuando se tiene muchos registros.

Me gustaría mucho poder empezar a poner en práctica estas restricciones y lo que hemos aprendido hasta ahora!!!

Genial.

Diagrama de clases

Tipos de datos
DE TEXTO
- char: almacena caracteres y cadenas -> usa memoria estática
- varchar: almacena caracteres y cadenas -> de forma dinámica, especialmente para cuando no sabes el tamaño que vas a ocupar (limite 255 caracteres)
- text: almacena cadenas pero tiene una mayor capacidad que varchar

NUMERICO
- integer: numero entero. Tiene dos subtipos, que hacen que la base de datos sea más eficiente al guardar y al traer informacion
* bigint: lo podemos usar para numeros muy grandes
* smallint: lo podemos usar para numeros de 99 o menos.
- decimal: recibe dos parametros (el numero, los decimales). Ayuda a que sea más preciso
- numeric: recube dos parametros(el numero, los decimales).

FECHA Y HORA
internamente sirve para tener registro de las modificaciones, creaciones, etc
- date: contiene solo la fecha (año mes dia)
- time: contiene la hora del dia (de las 24hs)
- datetime: contiene la fecha y la hora con precision de segundo
- timestamp: idem anterior

LOGICO
-booleano: tipo de dato binario (V o F). Sirve para validar por ejemplo una bandera

Constraints (restricciones, reglas)

  • Not null: cuando metemos datos, el valor por defecto es NULL (si se está completando la tabla, no puede ir “vacío”, en ese caso devuelve error)
  • Unique: Se asegura que cada valor en la columna, no se repita
  • Primary key: llave primaria. Es el campo clave. Nos garantiza que el campo es not null y que es unique
  • Foreign key: Identifica de manera única una TUPLA en otra tabla -> une dos tablas
  • Check: verifica que los valores ingresados se correspondan a valores preasignados
  • Default: cuando no hay un valor especificado, coloca un valor por defecto (por ejemplo, NULL o 0)
  • Index: Permite hacer busquedas más rápidas. Tiene una desventaja: relentiza la base de datos -> nos sirve cuando la usamos para sacar datos constantemente, pero no subo datos. Caso contrario, es contraproducente

Los ForeignKey, nos permiten realizar actualizacion y eliminacion en cascada.

Nota: Al leer Foreign Key, Una tupla es un registro

excelente recorde algunas cosas y otras hasta ahora me entere!!! increible

todo un mundo nuevo para mi , muy buena clase y aportes de los compañeros.

Les dejo una web con una descripción amplia para generar un modelo físico de bases de datos.

Buenas noches yo utilizo Lucidchart para crear los diagramas de flujos. Considero es muy buena siempre la uso

Excelente explicación, tan buena como las que se reciben en la universidad.

Estoy ansioso de poner todo esto en practica jejejjejeje es teoría pura que vamos aplicar en las próximas clases.

Estoy que me revienta el cerebro…

Varchar(255) ó Char(30). La diferencia esta en que mientras Varchar almacena cadenas de caracteres de longitud variable (es lo más común), **Char **almacena datos de longitud fija.

Me encanto esta clase

este tipo de información se comprende muy bien cuando estamos construyendo. Es muy importante tenerlo claro para luego traducir en la construcción

excelente clase teorica

CONSTRAINTS.
![](

Constraints (Restricciones): not null, unique, primary key, foreign key, check, default, index.

Ahora ya entiendo el NOT NULL

Constraints (Restricciones)

NOT NULL: Se asegura que la columna no tenga valores nulos
UNIQUE: Se asegura que cada valor en la columna no se repita
PRIMARY KEY: Es una combinación de NOT NULL y UNIQUE
FOREIGN KEY: Identifica de manera única una tupla en otra tabla
CHECK: Se asegura que el valor en la columna cumpla una condición dada
DEFAULT: Coloca un valor por defecto cuando no hay un valor especificado
INDEX: Se crea por columna para permitir búsquedas más rápidas

Tipos de dato:

Texto: CHAR(n), VARCHAR(n), TEXT
.
Números: INTEGER,
Son subtipos de Integer:

  • BIGINT
  • SMALLINT,
    DECIMAL(n,s), NUMERIC(n,s)
    .
    Fecha/hora: DATE, TIME, DATETIME, TIMESTAMP
    .
    Lógicos: BOOLEAN
    .
    .
    Constraints (Restricciones)

NOT NULL: Se asegura que la columna no tenga valores nulos
UNIQUE: Se asegura que cada valor en la columna no se repita
PRIMARY KEY: Es una combinación de NOT NULL y UNIQUE
FOREIGN KEY: Identifica de manera única una tupla en otra tabla
CHECK: Se asegura que el valor en la columna cumpla una condición dada
DEFAULT: Coloca un valor por defecto cuando no hay un valor especificado
INDEX: Se crea por columna para permitir búsquedas más rápidas

Existiran mas restricciones??

Diagrama Fisico: tipos de datos y constraints

Tipos de Datos

  • Texto: char, varchar, text
  • Numero: integer, bigint, smallint, decimal, numeric
  • Fecha/hora: date, time, datetime, timestamp
  • Lógicos: boolean

Constraints (Restricciones)

  • Not null: sin valores vacios
  • Unique: los valores no se repiten
  • Primary key: combina not null y unique
  • Foreing key: Identifica de manera unica una tupla en otra tabla
  • Check: Se asegura que el valor en la columna cumpla una condicion o regla dada.
  • Default: Coloca un valor por defecto cuando no hay un valor especifico.
  • Index: Se crea por columna para permitir busquedas mas rapidas.

Limitaciones SQL:
Se utilizan para especificar reglas para los datos de una tabla.

un varchar es un campo de tipo char de longitud variable…es decir puede contener menos de su longitud maxima…

un char es un campo de longitud fija…

Mi proyecto es una base de datos de fotos. Les comparto para los que quieran guardar images, que pueden usar el tipo de dato “BLOB”, similar al “TEXT” pero para datos binarios de gran longitud.

https://www.tutorialspoint.com/mysql/mysql-data-types.htm
https://docs.oracle.com/javadb/10.8.3.0/ref/rrefblob.html

Me encanto esta clase

Cuando uno trabaja con bases de datos que tipo de software se maneja para hacer los diagramas?

Excelente clase!

Foreign Key cuando queremos juntar dos tablas , cuando queremos decir que una tabla está relacionada con otra, la primary key de una tabla se añade en la otra tabla como Foreign Key

No me quedo muy claro, entiendo que estos 2 tipos de datos muestran la fecha y hora pero ¿cual es la diferencia exacta entre DATETIME y TIMESTAMP ?

NOT NULL: no lo puedes dejar en blanco
UNIQUE: no puedes duplicar un dato ya registrado anteriormente
PRIMARY KEY: ID de mi tabla
FOREIGN KEY: ID de la otra tabla
CHECK: lista de opciones predefinidas
DEFAULT: si no registras dato le ponemos por defecto otro dato
INDEX: lista mis registros para busquedas rapidas, pero la voy a listar cada vez que agregues un registro. Eficiente si no ingresas registros constantemente pero tienes mucha información. Ineficiente si ingresas registros con mucha frecuencia.

Restricción Primary Key: De las más importantes. Nos ayuda a hacer las relaciones entre entidades.

Tipo de datos Booleano, sólo puede tener 2 valores (binario).