Tengo dos clases, Foo
y Bar
. Cada Bar
contendrá muchos Foo
s. Foo
s pueden estar en múltiples Bar
s, pero cada Foo
solo puede estar en un determinado Bar
una vez. Tengo la siguiente estructura de tabla:¿Una clave principal de MySQL en dos columnas ayuda con las consultas en la segunda columna?
CREATE TABLE `bar_foos` (
`bar_id` INT UNSIGNED NOT NULL,
`foo_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`bar_id` , `foo_id`)
);
Esto debería funcionar bien para mi relación muchos a muchos. Mi pregunta es si deseo que mi código pueda verificar si un Foo
está siendo usado por cualquier Bar
s, I.E. para indicar al usuario "Este Foo no se puede eliminar porque está en uso por 5 Bars", ¿el Índice principal CLAVE me ayude con una consulta como
SELECT * FROM `bar_foos` WHERE `foo_id`=2
o
SELECT COUNT(*) FROM `bar_foos` WHERE `foo_id`=2
O, ¿verdad necesita un índice separado para la columna foo_id
solo?
Si se trata de una relación de uno a muchos, ¿por qué necesita una tabla 'bar_foos'? ¿Por qué no simplemente usar 'bar.foo_id' (y tener un índice en ese campo también)? –
"Los foos pueden estar en múltiples barras pero cada Foo solo puede estar en una barra determinada una vez". No es una relación de uno a muchos, es de muchos a muchos con distintas combinaciones. –
@Michael: @djacobson se metió en la nariz, no puedo hacerlo de esa manera – Josh