2012-02-03 8 views
11

Nunca he diseñado una base de datos/modelo de datos/esquema desde cero, especialmente para una aplicación web. En algunas entrevistas de trabajo recientes, me pidieron que 'diseñara' una base de datos para una aplicación de carrito de compras. Ahora estoy trabajando en una aplicación de compras móvil (minorista, usa phonegap) con un backend que necesita almacenar y procesar información de productos y pedidos. La escala de este problema es tan grande que no sé por dónde empezar. Esperaba un consejo sobre -diseña una base de datos para una aplicación de carrito de la compra?

  1. ¿Cómo debo abordar ese problema (DB de aplicación de carro de compras)? donde debería empezar ?
  2. ¿Hay algún error/error común que deba evitar?
  3. ¿Qué paradigmas de optimización/eficiencia debo tener en cuenta al diseñar un DB?
  4. ¿Cómo debo identificar a las entidades en el espacio problemático (productos, pedidos, etc.)? ¿cómo debo derivar las relaciones entre ellos?
  5. Cuando un entrevistador hace una pregunta, ¿qué está buscando exactamente? ¿Hay algo que debería/no debería decir?

También debo aclarar que -

  1. Sí, soy un novato, y mis motivos son para aprender diseño de base de datos y prepararse para próximas entrevistas de trabajo. He leído libros de DBMS donde describen conceptos individuales en detalle, pero no tengo ni idea de cómo armar esas cosas y comenzar a diseñar una base de datos.
  2. He visto otros hilos en el diseño de la base de datos. Los autores ya tienden a poseer algunos conocimientos sobre cómo resolver el problema. Me gustaría entender la metodología detrás de hacer eso.
  3. Los enlaces a recursos externos, comentarios, sugerencias y cualquier cosa que me ponga en el camino correcto es muy apreciada. Espero que este hilo sirva como una experiencia de aprendizaje para mí y para los demás.
+1

Gracias por su respuesta y la información sobre la normalización. Como novato, tengo que aclarar esto desde mi punto de vista - es muy difícil para un novato comprender las complejidades del diseño de db en un dominio tan complicado como el carrito de la compra o la banca. esto tiene menos que ver con la comprensión de los conceptos básicos del diseño de DB, y más que ver con la comprensión del dominio y cómo dividirlo para obtener una buena solución. las respuestas anteriores han hecho un buen trabajo al proporcionar soluciones concisas para responder a ambos problemas: fundamentos del diseño Y conocimiento del dominio. el sentido común solo puede llevarte tan lejos. –

Respuesta

14

No puede haber cinco tablas en la base de datos:

CATEGORÍA esta tabla almacena información sobre categorías de productos de la jerarquía de la tienda y categorías.
El campo principal de esta tabla almacena el ID de la categoría principal.

PRODUCTO todos los productos de su tienda se almacenan en esta tabla. Esta tabla tiene una ID de categoría de clave externa que identifica ID de la categoría a la que pertenece un producto.

PEDIDO esta tabla almacena información sobre todos los pedidos realizados por los visitantes de su tienda.

ORDERED_SHOPPING_CART tabla está estrechamente conectada con las tablas PRODUCT y ORDER; almacena información sobre el contenido de las órdenes de los clientes.

SPECIAL_OFFER tabla contiene una lista de productos, que se muestran en la página de inicio como ofertas especiales

+0

No lo defiendo, pero creo que puede ayudarlo a visualizar mejor su problema e incluye/cubre los requisitos máximos de una aplicación de carrito de compras. incluso no he desarrollado ninguna base de datos de compras, así que esta también es una cuestión de interés para mí también – Devjosh

+1

. Este es un buen punto para comenzar a trabajar en mis habilidades de diseño. +1 internet para ti. –

+0

eso es genial, me alegra que te haya ayudado. todo lo mejor – Devjosh

11

Una respuesta breve es la forma en que abordaría este problema. En primer lugar, hay montones de carros de compras de código abierto o gratuitos basados ​​en la web. Esto significa que puede obtener uno, configurar la base de datos y luego tener una buena idea de lo que hicieron.

Hágase preguntas tales como, ¿por qué lo han hecho? ¿Por qué es bueno? ¿Qué inconveniente podría haber? ¿Cómo lo haría de manera diferente? ¿por qué?

Intentaré adquirir una herramienta de diseño de base de datos que le permita visualizar la base de datos. (como el diseñador de bases de datos en Visual Studio o tengo uno de MicroOlap que hace bases de datos pgsql)

Luego debe pensar en lo que necesita en la base de datos. ¿Qué va a hacer el cliente? Compra productos! Por lo tanto, necesita una tabla de productos. Sin bajar toda la ruta, puedes ver el punto. Imagina lo que se necesita, básicamente, crea una mesa para eso.

Si tiene más de una opción para un campo en una tabla, haga otra tabla con una relación en ella. Entonces, si tiene una tabla de productos y tiene un campo de estado. podrías tener más de un estado (por ejemplo, fuera de stock, número limitado, artículo grande, caro) en lugar de codificar estos campos, crear una tabla y permitir al usuario agregar elementos a la tabla. a continuación, en la tabla de productos, agregue un campo status_id y vincúlelo a la tabla de estado

Muchas relaciones son útiles para saber. (Me quedé corto con esto yo mismo). Diga que tiene un componente y tablas de productos.Los productos pueden estar formados por muchos componentes y los componentes pueden asignarse a muchos productos. Crea una tabla de mediadores. Algo como prodcomp (y en esto tendrías campos como id, prod_id, comp_id, qtyneeded).

Conozca index correctly.

No cree la base de datos hasta que tenga una idea sólida de cómo funcionará. esto ahorra tiempo al recrearlo más tarde.

Puede haber más en esto, sin embargo, espero haberle dado un buen comienzo.

Cuestiones relacionadas