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

2

Playground: tu primera consulta en bases de datos

Introducción a las bases de datos relacionales

3

Historia de las bases de datos relacionales

4

Qué son entidades y atributos

5

Entidades de Platzi Blog

6

Relaciones

7

Múltiples muchos

8

Diagrama ER

9

Diagrama Físico: tipos de datos y constraints

10

Diagrama Físico: normalización

11

Formas normales en Bases de Datos relacionales

12

Diagrama Físico: normalizando Platziblog

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

13

¿Qué es RDB y RDBMS?

14

Instalación local de un RDBMS (Windows)

15

Instalación local de un RDBMS (Mac)

16

Instalación local de un RDBMS (Ubuntu)

17

Clientes gráficos

18

Servicios administrados

SQL hasta en la sopa

19

Historia de SQL

20

DDL create

21

Playground: CREATE TABLE

22

CREATE VIEW y DDL ALTER

23

DDL drop

24

Playground: VIEW, ALTER y DROP en SQL

25

DML

26

Playground: CRUD con SQL

27

¿Qué tan standard es SQL?

28

Creando Platziblog: tablas independientes

29

Creando Platziblog: tablas dependientes

30

Creando Platziblog: tablas transitivas

Consultas a una base de datos

31

¿Por qué las consultas son tan importantes?

32

Estructura básica de un Query

33

SELECT

34

Playground: SELECT en SQL

35

FROM y SQL JOINs

36

Utilizando la sentencia FROM

37

Playground: FROM y LEFT JOIN en SQL

38

WHERE

39

Utilizando la sentencia WHERE nulo y no nulo

40

Playground: Filtrando Datos con WHERE

41

GROUP BY

42

ORDER BY y HAVING

43

Playground: Agrupamiento y Ordenamiento de Datos

44

El interminable agujero de conejo (Nested queries)

45

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

46

Preguntándole a la base de datos

47

Consultando PlatziBlog

48

Playground: Prueba Final con PlatziBlog

Introducción a la bases de datos NO relacionales

49

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

50

Servicios administrados y jerarquía de datos

Manejo de modelos de datos en bases de datos no relacionales

51

Top level collection con Firebase

52

Creando y borrando documentos en Firestore

53

Colecciones vs subcolecciones

54

Recreando Platziblog

55

Construyendo Platziblog en Firestore

56

Proyecto final: transformando tu proyecto en una db no relacional

Bases de datos en la vida real

57

Bases de datos en la vida real

58

Big Data

59

Data warehouse

60

Data mining

61

ETL

62

Business intelligence

63

Machine Learning

64

Data Science

65

¿Por qué aprender bases de datos hoy?

Bonus

66

Bases de datos relacionales vs no relacionales

67

Elegir una base de datos

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Diagrama Físico: tipos de datos y constraints

9/67
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 386

Preguntas 87

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

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.

Probando

Les comparto mi Mapa mental de Tipos de Datos

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.

DATA TYPES
![](

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 =)

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.

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.

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

Í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

Les comparto mi Mapa mental de Constraints

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.

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/

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

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

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

**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)

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

(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)

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.

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.

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.

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. ❤️❤️❤️

esta ha sido la mejor clase hasta el momento.

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

MOSTER ER PARK
https://www.monst-er.de/

Este es un videojuego para aprender y practicar sobre los modelos entidad relación

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

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?

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

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

¿Que diferencia existe entre Datetime y Timestamp?

mucha teoria ya, manos a la obra

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

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

Asi va mi Modelo entidad Relacion Cualquier retro seria de mucha ayuda, es para un modelo de Call Center atendiendo solicitudes de PQR.

¿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?

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.

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.

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

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

Excelente clase, hasta hora todo se ha entendido perfectamente!

**Tipos de Dato**: 1. **Texto**: * `CHAR(n)`: Caracteres fijos con una longitud especificada `n`. * `VARCHAR(n)`: Caracteres de longitud variable, con un máximo de `n`. * `TEXT`: Para textos largos sin una longitud fija definida. 2. **Números**: * `INTEGER`: Números enteros. * `BIGINT`: Números enteros más grandes. * `SMALLINT`: Números enteros más pequeños. * `DECIMAL(n,s)`, `NUMERIC(n,s)`: Números decimales fijos, donde `n` es la precisión total y `s` es la cantidad de dígitos después del punto decimal. 3. **Fecha/Hora**: * `DATE`: Solo fecha. * `TIME`: Solo hora. * `DATETIME`: Fecha y hora combinadas. * `TIMESTAMP`: Fecha y hora combinadas con zona horaria. 4. **Lógicos**: * `BOOLEAN`: Valores verdadero o falso. **Constraints (Restricciones)**: 1. **NOT NULL**: Asegura que la columna no pueda tener valores nulos. 2. **UNIQUE**: Garantiza que cada valor en la columna sea único. 3. **PRIMARY KEY**: Es una combinación de NOT NULL y UNIQUE. Identifica de manera única cada fila en la tabla. 4. **FOREIGN KEY**: Establece una relación entre la columna y otra tabla, asegurando la integridad referencial. 5. **CHECK**: Asegura que los valores de la columna cumplan una condición específica. 6. **DEFAULT**: Establece un valor por defecto para la columna cuando no se especifica uno. 7. **INDEX**: Utilizado para mejorar la velocidad de las operaciones de búsqueda y consulta en la columna. El Diagrama Físico es esencial porque nos ayuda a implementar de manera efectiva el diseño conceptual y lógico en un sistema de base de datos real, teniendo en cuenta los tipos de datos y las restricciones necesarias para asegurar la integridad y eficiencia de los datos. 🛠️📊💾

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

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.

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

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

DIFERENCIAS ENTRE DATETIME Y TIMESTAMP CON USOS PRACTICOS

TIMESTAMP es afectada por las configuraciones/ajustes de la zona horaria. Mientras que DATETIME es constante.

TIMESTAMP es de cuatro bytes y DATETIME de ocho bytes, por consecuencia las marcas de tiempo (TIMESTAMP) son también más ligeras en la base de datos, con indexados más rápidos.

Teniendo en cuenta todo lo anterior si usted desea almacenar un valor específico “podría que fuese mejor” usar DATATIME, pero si lo que desea es almacenar para realizar algún seguimento de posibles cambios en los registro quizás le convenga usar TIMESTAMP cuando cambia un registro.

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

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.

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.

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

Genial.

estoy enfocado en programar, y en lo que he aprendido, creaba tablas sin saber que significan algunas cosas, esta información vale oro, uuuf gracias !!

Diagrama Físico: tipos de datos y constra ints

Fecha: 3 de septiembre de 2023

Tema: Tipos de datos 😄

Notas:

Tipo de dato Descripcion Tipo
char(n) Almacenamos cadenas de texto estaticas Texto
varchar(n) Almacenamos cadenas de texto de manera dinamica (max 255 caracteres) Texto
Text Cadenas muy grandes Texto
INTEGER Sin punto decimal Númerico
BIGINT Números muy grandes Númerico
SMALLINT Números muy pequeños Númerico
Decimal(n,s) N es el numero y s la presicion de los decimales Númerico
Numeric N es el numero y s la presicion de los decimales Númerico
Tipo de Campo Tamaño de Almacenamiento
TINYINT 1 byte
SMALLINT 2 bytes
MEDIUMINT 3 bytes
INT 4 bytes
INTEGER 4 bytes
BIGINT 8 bytes
FLOAT(X) 4 ú 8 bytes
FLOAT 4 bytes
DOUBLE 8 bytes
DOUBLE PRECISION 8 bytes
REAL 8 bytes
DECIMAL(M,D) M+2 bytes sí D > 0, M+1 bytes sí D = 0
NUMERIC(M,D) M+2 bytes if D > 0, M+1 bytes if D =
Tipo de dato Descripcion Tipo
Date Contiene año, mex y dia Fecha/hora
Time Hora del dia Fecha/hora
DATETIME Tienen dia, mes, año y hora Fecha/hora
Boolean True or false Logico

Restricciones

Constraints (RESTRICCIONES) Descripción
NOT NULL Se asegura que la columna no tenga valores nulos
UNIQUE Se asegura que vada 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, es el otro lado de la primary key, la primary key de una tabla es la foreign key en otra tabla
Check Se asegura que el valor en la columna cumpla una condicion dada
Default El tipo de dato por defecto es null, cuando queremos cambiar esto, lo cambiamos con DEFAULT, colocamos un valor por defecto cuando no hay valor especificado
Index Se crea por columna para permiter búsquedas más rápidas, es incremental, pero es lento cuando indexamos un nuevo dato, es mejor cuando hacemos muchas consultas pero no introducimos muchos datos

<aside>
📌 RESUMEN:

</aside>

Si de casualidad vieron el curso de “Fundamentos de Ingeniería de Software”, se entenderá porque los datos VARCHAR solo pueden ser de 255 caracteres. (Su tamaño es de 8 Bytes)

Esta parte me parece muy interesante, ya que si logramos que nuestras bases estén estructuradas, catalogadas con su respectivo tipo de datos y los constraints. nos resolverá a futuro dolores de cabeza y lograr tener una base más homogénea y limpia.

MUY INTERESANTE ESTOS TIPOS

😄 Mis apuntes

Me confirman si está bien hecho mi diagrama base, Según yo, aqui muchos actores pueden participar en varias peliculas y viceversa. Igual en todos los casos.

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.

El check puede ser básicamente para meter una validación.

Tipos de Dato

Texto

CHAR → Cadenas con un número específico de caracteres.

VARCHAR → Cadenas con un número variable de caracteres: límite de 255 caracteres.

T E X T → Almacena cadenas muy l a r g a s de texto.
.
.

Números

INTEGER → Para números enteros.

BIGINT → Para números grandes.

SMALLING → Para números pequeños.
.
-Ambos reciben (n,s) como parámetros (número entero, decimal)-

DECIMAL → Números decimales.

NUMERIC → Números más complejos.
.
.

Fecha / Hora

DATE → Fecha

TIME → Hora

DATETIME → Combinación de fecha y hora

TIMESTAMP → Combinación de día, hora incluso a milisegundos
.
.

Lógico

BOOLEAN → Tipo de dato binario: verdadero o falso.
.
.
.
Recuerda que…

Al especificar los tipos de dato, ayudamos a la base de datos a optimizar su espacio, así como su velocidad de guardado y recuperación de datos.

Excelente clase!

Diagrama de clases

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.

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…