sql >> データベース >  >> RDS >> Mysql

データベース設計の質問

    自分の経歴や、プログラミングとデータベース設計> 。読んでみるべきだと思います。概念的には、デザインはかなりシンプルですが。あなたの説明は、たった2つのエンティティを識別します:

    • 金融商品;および
    • 引用。

    したがって、属性を特定する必要があります。

    金融商品:

    • セキュリティコード;
    • 市場;
    • など

    引用:

    • タイムスタンプ;
    • 金融商品;
    • 入札価格;および
    • 売値。

    金融商品への参照は、外部キー と呼ばれるものです。 。各テーブルには、主キー も必要です。 、おそらく自動インクリメントフィールドです。

    概念的にはかなり単純です。

    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'
    

    データセットが十分に大きい場合は、テーブルに(bid + ask)/ 2を含めて、その場で計算する必要がないようにすることができます。

    さて、これが正規化されたビューです。この後、パフォーマンスの最適化を開始する必要がある場合があります。 数十億行を格納することについて、この質問を検討してください。 MySQL 。パーティショニングはMySQL5.1以降の機能です(かなり新しい)。

    しかし、自分自身に問うべきもう1つの質問は、これです。このすべてのデータを保存する必要がありますか?私がこれを尋ねる理由は、私が以前オンラインブローキングで働いていて、非常に限られたウィンドウですべての取引を保存しただけであり、取引はあなたが望むように見える見積もりよりも少ないデータセットになるからです。

    数十億行のデータを保存することは深刻な問題であり、解決するには本当に深刻な支援が必要です。



    1. Strftime()関数がSQLiteでどのように機能するか

    2. 200 GB以上のデータで適切に機能するデータベースはどれですか?

    3. サブクエリと相関サブクエリの違い

    4. mysqldumpを使用したmysqlデータベースのバックアップ