|
| 1 | +empresa(3) -> EP1 |
| 2 | + |
| 3 | +estado(3) -> ES1 |
| 4 | +distrito(4) -> DI01 |
| 5 | +moneda(4) -> MN01 |
| 6 | +talla(4) -> TL01 |
| 7 | +color(4) -> CR01 |
| 8 | +categoria(4) -> CT01 |
| 9 | +estilo(4) -> ET01 |
| 10 | +rol(4) -> RL01 |
| 11 | +empleado(7) -> EM10001 |
| 12 | +marca(7) -> MA10001 |
| 13 | +modelo(7) -> MD10001 |
| 14 | +calzado(8) -> CZ100001 |
| 15 | +cliente(8) -> CL100001 |
| 16 | +boleta(8) -> BL100001 |
| 17 | + |
| 18 | + |
| 19 | + |
| 20 | +BASE DE DATOS |
| 21 | + |
| 22 | +--> utilizar una llave primaria compuesta como llave foranea [ https://stackoverflow.com/questions/10565846/use-composite-primary-key-as-foreign-key ] |
| 23 | + [ https://es.stackoverflow.com/questions/198599/como-asignar-una-llave-primaria-compuesta-como-llave-foranea-en-otra-tabla-con ] |
| 24 | +--> relacion entre producto-talla-color [ https://stackoverflow.com/questions/31747273/mysql-database-to-store-product-color-size-and-stock ] |
| 25 | +--> agrupacion de una llave compuesta [ https://es.stackoverflow.com/questions/404584/error-en-postgresql-no-hay-restricci%C3%B3n-unique-que-coincida-con-las-columnas-dad ] |
| 26 | +--> UPDATE-JOIN actualizar datos de una tabla en funcion de los valores de otra tabla [ https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-update-join/ ] |
| 27 | + |
| 28 | + |
| 29 | + Importante: cuando pasa una llave a otra tabla como llave foranea esta TABLA_1 debe verificar que dicha llave sea unica, porlo que si la tabla de donde proviene la llave solo |
| 30 | + tiene una sola llave primaria no tendremos que hacer nada por defecto esa llave es unica, pero que pasa si la otra tabla(TABLA_2) tiene una llave compuesta por 2 o |
| 31 | + mas llaves primarias, en este caso podemos agregar la restriccion UNIQUE a todos las llaves primarias que tiene(EN TABLA_2), pero al registrar estas |
| 32 | + llaves(EN TABLA_1) deben respetar que sean UNICAS de manera individual lo cual en la mayoria de los casos no es lo que se necesita. La mejor seria agrupar |
| 33 | + (EN TABLA_1) esta llave compuesta para que se identifique ambos valores como una sola llave y cuyo valor "en conjunto" es UNICO asi: |
| 34 | + |
| 35 | + CONSTRAINT fk_calzado1 FOREIGN KEY(cod_modelo,cod_color) REFERENCES modelo_color(cod_modelo,cod_color) ON DELETE CASCADE |
| 36 | + |
| 37 | + ahora sabemos que una tabla intermedia que tiene como identificador una llave compuesta(2 o mas llaves primarias) puede pasar a otra como llave foranea, PERO |
| 38 | + para esto tenemos que enviar todas estas llaves a la otra tabla lo cual no es conveniente cuando se tiene más de 3 llaves primarias, para esto podemos crear |
| 39 | + un campo opcional que tambien sera identificado como llave primaria y será SOLO esta la que pasará a la otra tabla como identificador de esta tabla intermedia, |
| 40 | + para esto será necesario que identifiquemos adicionalmente este campo nuevo como UNIQUE ademas del PRIMARY KEY. Esto es necesario porque la tabla intermedia |
| 41 | + tendra multiples llaves primarias y al pasar SOLO un PK nada garantiza la UNICIDAD de los campos. |
| 42 | + |
| 43 | +--> utilizar multiples Bases de Datos en un mismo proyecto [ https://www.baeldung.com/spring-boot-configure-multiple-datasources ] |
| 44 | + |
| 45 | + 1. en "application.properties" configurar las dos conexiones en la base de datos: |
| 46 | + |
| 47 | + psql.url=jdbc:postgresql://localhost:5432/bd_sfm_psql |
| 48 | + psql.username=postgres |
| 49 | + psql.password=12345 |
| 50 | + psql.driverClassName=org.postgresql.Driver |
| 51 | + |
| 52 | + psql.hikari.connectionTimeout=44444 |
| 53 | + |
| 54 | + msql.url=jdbc:mysql://localhost:3306/bd_sfm_mysql |
| 55 | + msql.username=root |
| 56 | + msql.password=12345 |
| 57 | + msql.driverClassName=com.mysql.cj.jdbc.Driver |
| 58 | + |
| 59 | + -> "psql" y "msql" son dos alias que se colocan solo para diferenciar las dos conexiones, estas las usaremos en el siguiente paso |
| 60 | + para generar las conexiones. |
| 61 | + |
| 62 | + 2. se debe crear un archivo de configuracion PARA CADA Base de Datos que contendra 4 metodos: |
| 63 | + a. XEntityManagerFactory --> el que verificara el mapeo de la entidades para que coincidan con la de la base de datos |
| 64 | + b. XTransactionManager ----> el que verificara las transacciones |
| 65 | + c. XDataSource + XDataSourceProperties ----> los que conectaran con la base de datos en SI, aca necesitaremos los alias "psql","msql" |
| 66 | + |
| 67 | +--> Jasper Studio |
| 68 | + - IMAGEN URL: si la imagen ya esta conectado a un parametro de tipo String, esta imagen se podra cargar tanto con una ubicacion de la imagen |
| 69 | + dentro del proyecto, como una direccion URL que de la imagen en internet. |
| 70 | + |
| 71 | +--> Implementar seguridad Basica: |
| 72 | + 1. implementar las 2 dependencias en el pom |
| 73 | + 2. clase empleadoDetails service. |
| 74 | + 3. securityconfig -> principal |
| 75 | + 4. empleadoServicioImpl -> codificar el password, para registrar pass codificado |
| 76 | + |
| 77 | + |
| 78 | + |
| 79 | + |
| 80 | + |
| 81 | + |
| 82 | +--> Documentar una API |
| 83 | + 0. https://springdoc.org/#Introduction |
| 84 | + 0. https://editor.swagger.io/ |
| 85 | + 1. https://www.youtube.com/watch?v=U11UChfhdhI&ab_channel=TodoTIC |
| 86 | + 2. https://www.youtube.com/watch?v=7ryyEjt2RDw&ab_channel=LaMalditaProgramadora |
| 87 | + 3. https://www.youtube.com/watch?v=SdsaZ-t1QwA&ab_channel=MoonCode |
| 88 | + 4. https://www.youtube.com/watch?v=-SzKqwgPTyk&ab_channel=SACAViXTech |
| 89 | + |
| 90 | +-> EXCEPCION: |
| 91 | + - para crear excepciones personalizadas estas pueden extender de RuntimeException o Exception, la primera extiende de la |
| 92 | + segunda por lo que funciona con ambas, una diferencia es que si usamos la 2da necesitaremos declarar el Throws en el metodo |
| 93 | + que contiene el codigo de posible excepcion, pero si usamos la 1era ya NO, bastará con lanzar el constructor de la clase |
| 94 | + excepcion creada. |
| 95 | + |
| 96 | + |
| 97 | +--> Paginas con API REST de referencia: |
| 98 | + 1. https://spring.io/guides/tutorials/rest/ |
| 99 | + 2. https://www.nigmacode.com/java/crear-api-rest-con-spring/ |
| 100 | + 3. https://www.makeuseof.com/rest-api-spring-boot-create/ |
| 101 | + 4. https://www.appsdeveloperblog.com/many-to-many-relationship-in-spring-boot-rest-jpa/ |
| 102 | + |
| 103 | +--> Otras: |
| 104 | + 1. https://www.baeldung.com/spring-response-entity |
| 105 | + 2. https://fakeapi.platzi.com/en/rest/products |
| 106 | + 3. https://app.quicktype.io/ |
| 107 | + 4. https://json2csharp.com/code-converters/json-to-pojo |
| 108 | + 5. https://www.moesif.com/blog/technical/api-design/Which-HTTP-Status-Code-To-Use-For-Every-CRUD-App/ |
| 109 | + |
| 110 | +--> Temitas por revisar |
| 111 | + 1. BeanUtils.copyP -> copiar propiedades de un objeto a otro objeto. |
| 112 | + - ejempo [ https://itecnote.com/tecnote/java-jpa-update-only-specific-fields/ ] |
| 113 | + 2. @DynamicUpdate |
| 114 | + 3. HTTP PUT vs HTTP PATCH |
0 commit comments