No hay problema Gustavo.
Primero que nada, te dirijo a la Wikipedia para más info sobre diseño de estructuras:
http://es.wikipedia.org/wiki/Normalizaci%C3%B3n_de_una_base_de_datos (Todavía no puedo colocar enlaces).... aunque es un poco teórico, leería por lo menos los tres pasos de normalización de una BD, lo que es un Modelo de Entidad-Relación y las definiciones como "Clave foránea".
Ahora bien, respecto a tu sistema, me imagino que tiene que ver con algo de compras (no me preguntes cómo... simplemente lo sé

), así que pensaría en la siguiente estructura:
Tabla 1: Cliente
id: integer auto_increment primary key (esta es la clave primaria de esta tabla, asigna un número único al cliente)
nombre: varchar(100)
Tabla 2: Puntos
id_cliente: integer // es el número de identificación del cliente que está ganando los puntos
fecha: timestamp // momento en el que le asignas los puntos
puntos: integer // la cantidad de puntos que le asignas
En esta tabla, la clave primaria sería compuesta (id_cliente y fecha)
Tabla 3: Compras
id: integer auto_increment primary key (esta es la clave primaria de esta tabla, asigna un número único a la compra)
id_cliente: integer // es el número de identificación del cliente que ha realizado la compra
monto: float // monto de la compra
fecha: timestamp // momento en el que se hace la compra.
Con esta estructura, las consultas que necesitas son:
1) Puntos por cliente:
SELECT cliente.nombre, SUM(puntos.puntos) FROM cliente LEFT JOIN puntos ON (cliente.id=puntos.id_cliente) GROUP BY cliente.nombre;
Beneficios de esta query con la que tenías:
- También te muestra los clientes que no tienen puntos
- Si quieres puedes agregar un WHERE indicando un rango de fechas para saber qué cliente ganó puntos en un período de tiempo específico
2) Compras por cliente: (Más de los mismo)
SELECT cliente.nombre, SUM(compra.monto) FROM cliente LEFT JOIN compra ON (cliente.id=compra.id_cliente) GROUP BY cliente.nombre
Beneficios, los mismos
3) Puntos y compras por cliente:
SELECT cliente.nombre, SUM(puntos.puntos), SUM(compra.monto) FROM cliente LEFT JOIN puntos ON (cliente.id=puntos.id_cliente) LEFT JOIN compra ON (cliente.id=compra.id_cliente) GROUP BY cliente.nombre;
Y listo. Verás que mientras mejor diseñada está la estructura más fácil es obtener la información que deseas.