Relaciones de bases de datos utilizando phpmyadmin (claves compuestas)
-
24-09-2019 - |
Pregunta
Estoy un poco confundido en hacer una buena base de datos relacional. Estoy usando phpMyAdmin para crear una base de datos. Tengo las siguientes cuatro tablas. No se preocupe por ese lugar de hecho y el precio es opcional que son.
- Persona (obligatoria)
- Artículo (obligatorio)
- Lugar (opcional)
- Precio (opcional)
El artículo es la tabla principal. Siempre tendrá una persona vinculada. * Sé que te unes en MySQL para las tablas. Si quiero unir las tablas, podría usar claves compuestas (usando las ID de cada tabla), sin embargo, ¿es esta la forma más correcta de vincular las tablas? También significa que el artículo tendrá 5 ID, incluidas las suyas. Todo esto causa valores nulos (aparentemente un gran no, que puedo entender) porque si el lugar y el precio son opcionales y no se usan en una entrada a la tabla de elementos, tendré un valor nulo allí. ¡Por favor ayuda!
Gracias por adelantado. Espero que esto tenga sentido.
Solución
Valores nulos
También significa que el artículo tendrá 5 ID, incluidas las suyas. Todo esto causa valores nulos (aparentemente un gran no, que puedo entender) porque si el lugar y el precio son opcionales y no se usan en una entrada a la tabla de elementos, tendré un valor nulo allí
Personalmente creo que esta es una situación en la que NULL
Los valores son perfectos, y ciertamente no tendría ninguna duda sobre poner esto en el diseño de mi base de datos.
Una forma en que he visto a otros lograr lo mismo sin NULL
Los valores son crear un registro en las tablas opcionales (lugar y precio en su ejemplo) con una ID de 0 que significa que no hay un registro relacionado, pero esto solo hace 10 veces más trabajo para el desarrollador de la aplicación para filtrar estos registros - Es mucho más fácil hacer una unión y si no obtiene ningún registro, no hay registros relacionados en la tabla opcional.
Solo recuerda hacer un LEFT
o RIGHT OUTER
Únete si quieres regresar Item
s independientemente de si tienen un Place
o Price
asociado (obtendrá NULL
valores en las columnas de tabla opcionales para Item
s que no tienen registros asociados) y un INNER
Únete si solamente quiero el Item
s hacer tener un registro opcional asociado.
Llaves compuestas
Una clave compuesta es una clave en una tabla que está compuesta por más de una columna. Si cada uno de sus Person
, Item
, Place
y Price
Todos tienen una ID (incluso si es solo un número de incremento automático) no necesitará una clave compuesta, solo una columna de clave principal en cada tabla y una columna de clave extranjera en el Item
tabla para cada tabla relacionada - por ejemplo item_id
, person_id
, place_id
, price_id
. Afirmas que Item
tiene su propia identificación, por lo que no debería necesitar una clave compuesta, solo una clave principal en el item_id
columna.