Es mejor poner todos los atributos en la misma mesa
Si comienza a almacenar nombres de atributos en una tabla, está almacenando metadatos en su base de datos, que rompe la primera forma normal.
Además, mantenerlos todos en la misma tabla simplifica sus consultas.
le gustaría tener:
SELECT show_photos FROM User WHERE user_id = 1
O
SELECT up.show_photos FROM User u
LEFT JOIN UserPrivacy up USING(user_id)
WHERE u.user_id = 1
combinaciones estén bien, pero mantenerlos para asociar entidades separadas y 1-> N relaciones.
Hay un límite en el número de columnas, y solo si crees que podrías alcanzar ese límite, harías cualquier otra cosa.
Existen razones legítimas para almacenar pares de nombre de nombre en una tabla separada, pero el temor de agregar columnas no es uno de ellos. Por ejemplo, crear una tabla de valores de nombre puede, en algunas circunstancias, facilitarle la consulta de una lista de atributos. Sin embargo, la mayoría de los motores de base de datos, incluido PDO en PHP, incluyen métodos de reflexión mediante los cuales puede obtener fácilmente una lista de columnas para una tabla (atributos para una entidad).
Además, tenga en cuenta que su campo de Id. En Usuario debe ser user_id, no solo id, a menos que esté usando Ruby, lo que obliga a la identificación. 'User_id' es preferido porque con sólo ID, su une a tener este aspecto:
ON u.id = up.user_id
que parece extraño, y la forma preferida es la siguiente:
ON u.user_id = up.user_id
o más simplemente:
USING(user_id)
No tenga miedo de 'agregar otro atributo'. Es normal, y está bien.
¿Qué quiere decir con "Mejor"? ¿Más rápido? Más barato? Más simple? Se usó más memoria? ¿Se utilizan más E/S? Mayor tasa de facturación? Más seguridad laboral? –
Creo que el tiempo es aproximadamente el mismo, la memoria también, pero el uso de E/S: vale la pena considerar – Robert