Estoy tratando de algo así como Database Design for Tagging, excepto que cada una de mis etiquetas se agrupan en categorías.¿Cómo diseñar un esquema de base de datos para admitir el etiquetado con categorías?
Por ejemplo, supongamos que tengo una base de datos sobre vehículos. Digamos que en realidad no sabemos mucho sobre vehículos, por lo que no podemos especificar las columnas que tendrán todos los vehículos. Por lo tanto, "etiquetaremos" vehículos con información.
1. manufacture: Mercedes
model: SLK32 AMG
convertible: hardtop
2. manufacture: Ford
model: GT90
production phase: prototype
3. manufacture: Mazda
model: MX-5
convertible: softtop
Ahora bien, como se puede ver todos los coches están etiquetadas con su fabricación y modelo, pero las otras categorías no hacer todo el partido. Tenga en cuenta que un automóvil solo puede tener uno de cada categoría. ES DECIR. Un automóvil solo puede tener un fabricante.
Quiero diseñar una base de datos para apoyar una búsqueda de todos los Mercedes, o para poder enumerar todos los fabricantes.
mi diseño actual es algo como esto:
vehicles
int vid
String vin
vehicleTags
int vid
int tid
tags
int tid
String tag
int cid
categories
int cid
String category
tengo todas las claves primarias y externas adecuadas en el lugar, excepto que no puedo manejar el caso en el que cada vehículo sólo puede tener un solo fabricante. ¿O puedo?
¿Puedo agregar una restricción de clave externa a la clave primaria compuesta en etiquetas de vehículo? ES DECIR. ¿Podría agregar una restricción tal que la clave primaria compuesta (vid, tid) solo se pueda agregar a los Títulos de vehículo solo si no hay una fila en los Títulos de vehículo, de modo que para el mismo video, todavía no hay un tid en el el mismo cid?
Supongo que no. Creo que la solución a este problema es agregar una columna cid a vehicleTags, y crear la nueva clave primaria compuesta (vid, cid). Que se vería así:
vehicleTags
int vid
int cid
int tid
Esto evitaría tener un automóvil de dos fabricantes, pero ahora han duplicado la información que se encuentra en tid cid.
¿Cuál debería ser mi esquema?
Tom se dio cuenta de este problema en mi esquema de base de datos en una pregunta anterior, How do you do many to many table outer joins?
EDITAR
Sé que en el ejemplo de fabricación debe ser realmente una columna en la tabla de vehículo, pero digamos que usted puede' hacer eso El ejemplo es solo un ejemplo.
Creo que la respuesta correcta ahora es utilizar una base de datos nosql. Quién necesita un esquema – Pyrolistical