【问题标题】:How do I store a musical scale in a MySQL database如何在 MySQL 数据库中存储音阶
【发布时间】:2017-05-19 16:57:33
【问题描述】:

我有一个个人项目来帮助我记住一些音乐理论,它的位置如下:我有 36 个钢琴键。它们的标签如下:

C3, C3c D3, D3c, E3, F3, F3c, G3, G3c, A3, A3c, B3, C4, C4c D4, D4c, E4, F4, F4c, G4, G4c, A4, A4c, B4, C5, C5c D5, D5c, E5, F5, F5c, G5, G5c, A5, A5c, B5.

C3 是中音 C 音 C3c 是升 C 音。

我希望能够存储“Scales”,也就是上述一系列键。我还希望能够存储和弦,即上述键的组合。

例如,我想存储一个看起来像这样的 C 大调音阶...

[C3、D3、E3、F3、G3、A3、B3、C3]

我需要使用 MySQL 数据库存储和检索这些笔记。我最初的想法是将这些作为 JSON 数组存储在平面文本字段中,但显然这不是一个好习惯,尽管我不明白为什么。

什么样的替代数据库结构可以用来存储这样的不定系列模式?

【问题讨论】:

    标签: mysql sql json database database-design


    【解决方案1】:

    如果您不想以 JSON 格式存储 - 那么您需要一个链接表。 首先,您需要 PIANO_KEYS 表,您将在其中存储所有 36 个键及其排序顺序,如下所示:
    ID ||钢琴键 ||排序顺序
    此表中的记录将如下所示:
    1 || C3 || 1
    其次,您需要 PIANO_SCALES 表,您将在其中存储音阶:
    ID || SCALE_NAME
    毕竟,您需要表 KEY_SCALE_LINKS,您将在其中存储音阶和键之间的链接:
    KEY_ID || SCALE_ID
    您将能够通过以下方式从请求的比例中获取所有密钥:

    select k.piano_key
    from piano_keys k,
        key_scale_links l
    where k.id = l.key_id
        and l.scale_id = :requested_scale_id
    order by k.sort_order
    

    【讨论】:

    • 我真的很喜欢。
    猜你喜欢
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2018-04-22
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多