Mysql
 sql >> база данни >  >> RDS >> Mysql

Въпрос за дизайн на база данни

Всъщност не казвате какъв е вашият опит и колко знаете за програмирането и дизайн на бази данни . Изглежда, че трябва да почетеш. Концептуално обаче вашият дизайн е доста прост. Вашето описание идентифицира само две единици:

  • Финансов инструмент; и
  • Цитат.

Така че трябва да идентифицирате атрибутите.

Финансов инструмент:

  • Код за сигурност;
  • Пазар;
  • и др.

Цитат:

  • Часово клеймо;
  • Финансов инструмент;
  • Офертна цена; и
  • Попитайте цената.

Позоваването на финансовия инструмент е това, което се нарича външен ключ . Всяка таблица също се нуждае от първичен ключ , вероятно просто поле за автоматично увеличение.

Концептуално доста просто.

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'

Ако вашият набор от данни е достатъчно голям, може да искате да включите (оферта + запитване) / 2 в таблицата, за да не се налага да изчислявате в движение.

Добре, това е нормализираният изглед. След това може да се наложи да започнете да правите оптимизации на производителността. Помислете за този въпрос относно съхраняването на милиарди редове в MySQL . Разделянето на дялове е функция на MySQL 5.1+ (доста ново).

Но друг въпрос, който трябва да си зададете, е следният:трябва ли да съхранявате всички тези данни? Причината да попитам това е, че преди работех в онлайн брокерство и ние съхранявахме всички сделки само за много ограничен прозорец и сделките биха били по-малък набор от данни от котировките, което изглежда искате.

Съхраняването на милиарди редове данни е сериозен проблем и наистина се нуждаете от сериозна помощ, за да разрешите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проблем с първоначалното разрешение в mysql

  2. Можем ли да контролираме реда на изразите на LINQ с Skip(), Take() и OrderBy()

  3. Извикайте mysql вложени/вътрешни функции в querydsl

  4. Оптимизация на заявката за избор на mysql и как работи limit в mysql

  5. Как да деактивирам завинаги статистиките на колоните в MySQL 8?