proyecto:diagrama_er
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
proyecto:diagrama_er [2024/07/02 19:52] – ahogan | proyecto:diagrama_er [2024/07/02 22:30] (current) – [Relaciones no pueden tener llaves] ahogan | ||
---|---|---|---|
Line 1: | Line 1: | ||
======Indicaciones para el diagrama E/R====== | ======Indicaciones para el diagrama E/R====== | ||
- | En general, se diseña un diagrama E/R antes de definir las tablas. En el contexto de los proyectos, hemos detectado muchos problemas con los diagramas E/R entregados, pues los datos ya vienen como tablas, y se intenta interpretar un diagrama E/R de esas tablas. Igual, en muchos casos las tablas crudas están mal diseñadas, y la mejor forma de resolver este problema es definir un diagrama E/R y luego convertir ese diagrama a un modelo relacional más limpio. | + | En general, se diseña un diagrama E/R antes de definir las tablas. En el contexto de los proyectos, hemos detectado muchos problemas con los diagramas E/R entregados, pues los datos ya vienen como tablas. Igual, en muchos casos las tablas crudas están mal diseñadas, y la mejor forma de resolver este problema es definir un diagrama E/R y luego convertir ese diagrama a un modelo relacional más limpio. |
- | Algo que funciona muy mal, por ejemplo, es definir una entidad para cada tabla CSV y luego conectarlas con rombos arbitrarios. Quedará mal porque los rombos también representan tablas (salvo en casos excepcionales, | + | Igual, se generan complicaciones al intentar interpretar un diagrama E/R de tablas con problemas conceptuales, |
+ | |||
+ | Algo que funciona muy mal, por ejemplo, es definir una entidad para cada tabla CSV y luego conectarlas con rombos arbitrarios. Falla la estrategia porque el diagrama E/R no corresponderá con los datos base, y de todos modos, los datos base tienen un mal diseño. Quedará mal porque los rombos también representan tablas (salvo en casos excepcionales, | ||
Más concretamente, | Más concretamente, | ||
Line 10: | Line 12: | ||
* **Entidades débiles deberían tener una llave parcial** | * **Entidades débiles deberían tener una llave parcial** | ||
* **No se pueden reemplazar relaciones con entidades débiles** | * **No se pueden reemplazar relaciones con entidades débiles** | ||
+ | * **Relaciones no pueden tener llaves** | ||
* **Evitar poner múltiples relaciones en vez de roles** | * **Evitar poner múltiples relaciones en vez de roles** | ||
Line 21: | Line 24: | ||
Estudiante(_rut_, | Estudiante(_rut_, | ||
Curso(_código_, | Curso(_código_, | ||
- | Nota(_rut_, | + | NotaFinal(_rut_, |
</ | </ | ||
- | Para la entidad '' | + | Para la entidad '' |
{{ : | {{ : | ||
Line 32: | Line 35: | ||
{{ : | {{ : | ||
- | Ojo que dos o más entidades pueden tener atributos con el mimso nombre sin problema si realmente son de esa entidad; | + | Ojo que dos o más entidades pueden tener atributos con el mismo nombre sin problema si realmente son de esa entidad; |
=====Entidades débiles deberían tener una llave parcial===== | =====Entidades débiles deberían tener una llave parcial===== | ||
Line 39: | Line 42: | ||
< | < | ||
- | Nota(_rut_,_código_, | + | Nota(_rut_,_curso_, |
</ | </ | ||
Line 50: | Line 53: | ||
{{ : | {{ : | ||
- | En resumen, al crear una entidad débil sin llave parcial, indica un problema. Una alternativa puede ser una clase de jerarquía, donde las sub-clases son la misma entidad pero con la información opcional/ | + | En resumen, al crear una entidad débil sin llave parcial, indica un problema. Una alternativa puede ser una clase de jerarquía, donde las sub-clases son la misma entidad pero con la información opcional/ |
=====No se pueden reemplazar relaciones con entidades débiles===== | =====No se pueden reemplazar relaciones con entidades débiles===== | ||
Line 67: | Line 70: | ||
Eso porque realmente representa una relación entre dos entidades: '' | Eso porque realmente representa una relación entre dos entidades: '' | ||
- | Lo que pasa en ese caso es que los datos no da una tabla para '' | + | Lo que pasa en ese caso es que los datos no dan una tabla para '' |
{{ : | {{ : | ||
Line 86: | Line 89: | ||
</ | </ | ||
- | En este caso, la tabla '' | + | En este caso, la tabla '' |
+ | |||
+ | =====Relaciones no pueden tener llaves===== | ||
+ | |||
+ | Consider, por ejemplo, datos CSV con un esquema asi: | ||
+ | |||
+ | < | ||
+ | Estudiante(_rut_, | ||
+ | Inscripción(_id_, | ||
+ | </ | ||
+ | |||
+ | Es un ejemplo muy parecido al ejemplo anterior, salvo que ahora, lo que tuvimos como una relación ('' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Hay dos opciones. La primera es ignorar el atributo _id_ de los datos, y simplemente usar (como antes): | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | La otra opción es definir '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Ojo que dadas las relaciones de multiplicidad exactamente uno, se pueden combinar las tablas de '' | ||
+ | |||
+ | < | ||
+ | Estudiante(_rut_, | ||
+ | Inscripción(_id_, | ||
+ | Curso(_código, | ||
+ | </ | ||
+ | |||
+ | En el caso de que el mismo estudiante no pueda inscribir el mismo curso dos veces, se puede elegir la primera o la segunda opción. En el caso de que el mismo estudiante pueda inscribir el mismo curso varias veces, hay que elegir la segunda opción. | ||
=====Evitar poner múltiples relaciones en vez de roles===== | =====Evitar poner múltiples relaciones en vez de roles===== | ||
Line 106: | Line 140: | ||
{{ : | {{ : | ||
- | Ahora tenemos una relación que conecta el estudiante, el profe guía, y el grado. Lo que tenemos ahora es una relación ternaria | + | Ahora tenemos una relación que conecta el estudiante, el profe guía, y el grado. Lo que tenemos ahora es una relación ternaria |
Ojo que en la relación nueva, no tenemos una forma de definir bien que un estudiante tiene al máximo una tesis por grado (solo podemos decir que un estudiante tiene al máximo una tesis), pero podemos agregar esa información luego en el modelo relacional con una llave primaria. | Ojo que en la relación nueva, no tenemos una forma de definir bien que un estudiante tiene al máximo una tesis por grado (solo podemos decir que un estudiante tiene al máximo una tesis), pero podemos agregar esa información luego en el modelo relacional con una llave primaria. | ||
En resumen, si tienen varias relaciones entre el mismo par de entidades, hay que pensar si realmente son relaciones distintas, o mejor combinarlas en una relación con roles. | En resumen, si tienen varias relaciones entre el mismo par de entidades, hay que pensar si realmente son relaciones distintas, o mejor combinarlas en una relación con roles. |
proyecto/diagrama_er.1719949959.txt.gz · Last modified: 2024/07/02 19:52 by ahogan