sql >> Base de Datos >  >> RDS >> Mysql

Pregunta de diseño de base de datos

Realmente no dices cuál es tu experiencia y cuánto sabes sobre programación y diseño de bases de datos . Parece que deberías leer un poco. Aunque conceptualmente su diseño es bastante simple. Su descripción identifica solo dos entidades:

  • Instrumento financiero; y
  • Cita.

Entonces necesitas identificar los atributos.

Instrumento financiero:

  • Código de seguridad;
  • Mercado;
  • etc.

Cita:

  • Marca de tiempo;
  • Instrumento financiero;
  • Precio de oferta; y
  • Preguntar precio.

La referencia al instrumento financiero es lo que se llama una clave externa . Cada tabla también necesita una clave principal , probablemente solo un campo de incremento automático.

Conceptualmente bastante simple.

CREATE TABLE instrument (
  id BIGINT NOT NULL AUTO_INCREMENT,
  code CHAR(4),
  company_name VARCHAR(100),
  PRIMARY KEY (id)
);

CREATE TABLE quote (
  id BIGINT NOT NULL AUTO_INCREMENT,
  intrument_id BIGINT NOT NULL,
  dt DATETIME NOT NULL,
  bid NUMERIC(8,3),
  ask NUMERIC(8,3),
  PRIMARY KEY (id)
)

CREATE INDEX instrument_idx1 ON instrument (code);

CREATE INDEX quote_idx1 ON quote (instrument_id, dt);

SELECT (bid + ask) / 2
FROM instrument i
JOIN quote q ON i.id = q.instrument_id
WHERE i.code = 'GOOG'
AND q.dt >= '01-06-2008' AND q.dt < '02-06-2008'

Si su conjunto de datos es lo suficientemente grande, es posible que desee incluir (oferta + demanda) / 2 en la tabla para que no tenga que calcular sobre la marcha.

Ok, esa es la vista normalizada. Después de esto, es posible que deba comenzar a realizar optimizaciones de rendimiento. Considere esta pregunta sobre almacenar miles de millones de filas en MySQL . El particionamiento es una característica de MySQL 5.1+ (bastante nuevo).

Pero otra pregunta que debe hacerse es esta:¿necesita almacenar todos estos datos? La razón por la que pregunto esto es porque solía trabajar en corretaje en línea y solo almacenamos todas las operaciones durante un período muy limitado y las operaciones serían un conjunto de datos más pequeño que las cotizaciones, lo que parece querer.

El almacenamiento de miles de millones de filas de datos es un problema grave y realmente necesita ayuda para resolverlo.