Hola, quisiera saber que opinan ustedes de la estructura que les he dado a mis tablas para la aplicacion que quiero crear, es bienvenido todo tipo de aporte ya sean cristicas, opiniones, referencias, ayuda, comentarios, etc.
Para empezar les explicare un poco acerca del proyecto, será una aplicación atravez de la cual los usuarios podrán inscribir sus compañías o negocios (uno o mas), sera mas o menos como una página amarilla, podrán ingresar datos de sus compañías como el nombre, dueño, telefono, email, estado y ciudad en donde se encuentra, texto como por ejemplo ¿quienes somos?, ¿por qué elegirnos? y a que categoría y subcategoría pertenece, además podrán elegir un nombre de subdominio del tipo www.miaplicación.com/mynegocio y allí se podrá poner 1 banner algo grande, 3 fotos mas pequeñas a la izquierda, un mapa de la ubicación de la empresa y 1 Thumbails que aparecera cuando las personas hagan busquedas en el sitio, bueno todo esto resumidamente, no quiero aburrirlos...
Por el momento he pensado en la siguiente estructura de tablas, observen por favor la estructura y el tipo de datos que le di a cada campo (columna), si en algo estoy mal no duden en decirmelo se los agradecere mucho, bueno aqui van las tablas (son varias):
1.- Tabla "usuarios"
id_usuario int unsigned not null auto_increment primary key,
nombre char(25) not null,
apellido char(30) not null,
usuario char(15) not null, // Este será el nombre de usuario, el alias, apodo, etc
clave char(40) not null,
telefono1 char(15) not null,
telefono2 char(15), // El telefono2 sera opcional
email char(50) not null
2.- Tabla "negocios"
id_negocio int unsigned not null auto_increment,
id_usuario int not null, // clave secundaria ligada a usuarios.id_usuario
n_negocio char(30) not null, // nombre del negocio
id_pais int not null, // clave secundaria ligada a tabla paises.id_pais
id_estado int not null, // clave secundaria ligada a tabla estados.id_estado
id_ciudad int not null, // clave secundaria ligada a tabla ciudades.id_ciudad
cp char(10) not null, // codigo postal
id_categoria int not null, // clave secundaria ligada a tabla categorias.id_categoria
id_subcategoria int not null, // clave secundaria ligada a tabla subcategorias.id_subcategoria
inscripcion date not null, // fecha en la cual se inscribio el negocio
primary key (id_negocio, id_usuario, id_pais, id_estado, id_ciudad, id_categoria, id_subcategoria)
3.- Tabla "info_negocios"
id_negocio int not null primary key, // clave secundaria ligada a negocios.id_negocio
propietario char(50), // dueño de la empresa, compañía o negocio
telefono1 int not null, // los telefonos del negocio pueden ser diferentes a los de el usuario
telefono2 int, // el telefono2 sera opcional
email char(50), // el email del negocio puede ser diferente que el de el usuario
website varchar(255),
direccion varchar(255) // dirección fisica, calle, no°, avenida, etc...
4.- Tabla "subdominios"
id_subdominio int unsigned not null auto_increment primary key,
id_negocio int not null, // clave secundaria ligada a tabla negocios.id_negocio
n_subdominio char(30) not null // nombre del subdominio
5.- Tabla "categorias"
id_categoria int unsigned not null auto_increment primary key,
n_categoria char(50) not null // nombre de la categoria
6.- Tabla "subcategorias"
id_subcategoria int unsigned not null auto_increment primary key, // clave secundaria a tabla categorias.id_categoria
n_subcategoria char(50) not null // nombre de la subcategoria
7.- Tabla "paises"
id_pais int unsigned not null auto_increment primary key,
n_pais char(25) not null // nombre del pais
8.- Tabla "estados"
id_estado int unsigned not null auto_increment primary key,
id_pais int not null, // clave secundaria ligada a tabla paises.id_pais
n_estado char(25) not null // nombre del estado
9.- Tabla "ciudades"
id_ciudad int unsigned not null auto_increment primary key,
id_estado int not null, // clave secundaria ligada a tabla estados.id_estado
n_ciudad char(25) not null // nombre de la ciudad
Con esta estructura pretendo poder permitir lo siguiente:
1.- Cualquier persona puede inscribirse como usuario y puede inscribir a tantos negocios como quiera, lo que significa que podra configurar todos los subdominios que necesite y asi mismo podra configurar a que categoria y subcategoria pertenece cada negocio ademas de en que pais, estado y ciudad se encuentra el negocio.
2.- Puede ser que el usuario quiera establecer 2 numeros de telefonos (el primero es obligatorio) personales para que yo me pueda comunicarme con el, aunque puede ser que los numeros de telefono que quiera poner para el o los negocios sean diferentes, al igual que los correos electronicos, uno sera para establecer comunicacion entre la aplicacion y el usuario y el otro para recibir pedidos, reclamos o lo que sea de parte del cliente. Si no se introdujere telefonos y email para los campos (columnas) del negocio, entonces se estableceran como predeterminados los numeros de telefono y dirección de correo electronico que esten escritos en los campos (columnas) de la tabla usuarios.
3.- Las personas podran navegar por las categorias y subcategorias, seleccionando asi de la base de datos solo los negocios que sean validos para dichas categorias y subcategorias, ademas puede ser que el usuario quiera filtrar los datos por pais, estado, ciudad y codigo postal.
4.- Los usuarios podran hacer busquedas sencillas de lo que estan buscando y en donde, asi como busquedas avanzadas de lo que estan buscando, en que pais, estado, ciudad, codigo postal (opcional).
Tengo algunas dudas como las siguientes:
1.- Necesito saber o controlar que un usuario no duplique a la misma empresa 2 veces, es decir, puede inscribir muchos negocios diferentes pero no al mismo, ¿como lo compruebo?
2. En base a la opcion 3 de mas arriba, realmente no quiero permitir que naveguen en categorias y subcategorias de forma global, es decir, que se seleccione de toda la base de datos todos los negocios de cierta categoria y subcategoria, ya que esto alentaria a la base de datos, ademas de que creo que las personas quieren encontrar lo que sea que buscan cerca de ellos, por esto mismo quiero saber ¿como le hago para que desde antes puedan establecer un pais, estado y ciudad en la cual navegar por categorias?, de esta manera solo se seleccionaran los negocios que esten cerca de ellos y asi restar trabajo a la base de datos.
3.- Necesito implementar un control de pagos mensuales por los servicios (por cierto a muy bajo costo), para esto veo 2 opciones, cobrar cada que un cliente cumpla 1 mes de servicios, lo cual significa que posiblemente me tocara cobrarles cada dia a personas diferentes en diferentes lugares (si tienen tarjetas de credito creo que no es mucho problema ya que podrian hacerlo online), la otra opción es establecer fechas fijas como cada dia 15 de cualquier mes o cada dia 30 de cualquier mes, incluso ambas para compartir la carga en la aplicación (por los pagos con tarjeta de credito online) y para compartir el trabajo de cobrar personalmente. Para ser honesto me agrada mas la ultima opcion de establecer dias fijo como cada 15 y 30 (ambos), en este caso ¿como le puedo hacer para saber a que personas les toca pagar el 15 y aque otras el 30? necesito que me expliquen y que me ayuden con la estructura de dichas tablas.
4.- Por el momento no se como ordenar los resultados devueltos desde una busqueda del usuario, he pensado en ordenarlos por fecha de inscripcion, es decir, que aparescan primero los negocios que se inscribieron primero y al ultimo los que se han inscrito despues, aunque el usuario puede ordenarlos en sentido inverso a este, ademas de que pueda ordernarlos alfabeticamente por el nombre ascendente o descendente o por el codigo postal de manera ascendente o descendente. La verdad es que pensaba en alguna manera de permitir a mis clientes que al inscribir a sus compañias puedan incluir palabras claves y una descripcion para sus negocios, y de esta manera poder implementar un sistema de busqueda interno que permita un mejor orden en la presentación de los resultados cuando un usuario realiza una busqueda (solamente para las busquedas, no para la navegación de categorias), la descripcion tambien apareceria en los resultados de busqueda interna y tambien servirian para agregarlas a la etiqueta meta description del documento al igual que las palabras claves. Si este fuera el cso ¿como puedo hacer dicha tabla de descripcion y palabras claves, como la relaciono a los negocios y cual seria la logica del buscador interno para ordenar los resultados segun las palabras claves y la descripcion de los negocios.
5.- Necesito permitir la carga de archivos para las imagenes de cada negocio, el banner y las tre fotos extras, el mapa y el Thumbails, la pregunta es ¿cual seria la estructura de la tabla, como la relaciono con los negocios?
Por el momento es todo, gracias por sus tiempo, no es necesario que contesten a todas las preguntas, con un poco que aporten todos podrian ayudarme a solucionarlo todo.