Estoy construyendo esta herramienta para clasificar datos. Básicamente estaré recibiendo regularmente filas de datos en un archivo plano que se ven así:opiniones y consejos sobre la estructura de la base de datos
a:b:c:d:e
a:b:c:d:e
a:b:c:d:e
a:b:c:d:e
Y tengo una lista de categorías de romper estas filas arriba en, por ejemplo:
Original Cat1 Cat2 Cat3 Cat4 Cat5
---------------------------------------
a:b:c:d:e a b c d e
A partir de este momento, se conocen los nombres de las categorías, así como el número de categorías para desglosar los datos. Pero esto podría cambiar con el tiempo (por ejemplo, categorías añadidas/eliminadas ... el número total de categorías cambiadas).
Bien, así que realmente no estoy buscando ayuda sobre cómo analizar las filas o cómo obtener datos en una base de datos o algo ... Sé cómo hacer todo eso, y tengo el script central escrito en su mayoría, para manejar analizar filas de valores y separar en cantidad variable de categorías.
Principalmente estoy buscando consejos sobre cómo estructurar mi base de datos para almacenar esto. Así que he estado pensando en ello, y esto es lo que ocurrió:
Table: Generated
generated_id int - unique id for each row generated
generated_timestamp datetime - timestamp of when row was generated
last_updated datetime - timestamp of when row last updated
generated_method varchar(6) - method in which row was generated (manual or auto)
original_string varchar (255) - the original string
Table: Categories
category_id int - unique id for category
category_name varchar(20) - name of category
Table: Category_Values
category_map_id int - unique id for each value (not sure if I actually need this)
category_id int - id value to link to table Categories
generated_id int - id value to link to table Generated
category_value varchar (255) - value for the category
Básicamente, la idea es cuando analizar una fila, voy a insertar una nueva entrada en la tabla Generated
, así como las entradas X en la tabla Category_Values
, donde X es sin embargo muchas categorías que hay actualmente. Y los nombres de categoría se almacenan en otra tabla Categories
.
Lo que mi script inmediatamente hará es procesar las filas de los valores sin procesar y generar los valores de la categoría generada en un nuevo archivo que se enviará a alguna parte. Pero luego tengo este DB. Estoy haciendo para almacenar los datos generados para que pueda hacer otro script, donde puedo buscar y enumerar valores generados previamente, o actualizar entradas generadas previamente con nuevos valores o lo que sea.
¿Esto parece una buena estructura de base de datos? ¿Algo obvio que me estoy perdiendo o que potencialmente me estoy engarzando? Por ejemplo, con esta estructura ... bueno ... yo no soy un experto en SQL, pero creo que debería ser capaz de hacer como
select * from Generated where original_string = '$string'
// id is put into $id
y luego
select * from Category_Values where generated_id = '$id'
... y luego tendré mis datos para trabajar con los resultados de búsqueda o formulario para alterar los datos ... bueno, estoy bastante seguro de que incluso puedo combinar esto en una consulta con una combinación o algo, pero no soy tan bueno con sql así que no sé cómo hacer eso ... pero el punto es que sé que puede hacer lo que necesito de esta estructura db ... ¿pero estoy haciendo esto más difícil de lo necesario? ¿Haciendo algún obvio error novato?
bienvenido a stackoverflow, pregunta muy agradable, buen diseño y un montón de fondo. – Johan
FWIW: selecciona * de Category_Values donde generated_id in (selecciona generated_id de Generated donde original_string = '$ string') – Jeremiah
Gracias Jeremiah, lo escribiré :) – slinkhi