如何在MySQL数据库中存储音阶

时间:2017-05-19 16:57:33

标签: mysql sql json database database-design

我有这个个人项目来帮助我记住一些音乐理论,这里是它的所在:我有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尖音符。

enter image description here

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

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

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

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

哪种替代数据库结构可用于存储不确定的一系列模式?

1 个答案:

答案 0 :(得分:2)

如果您不想以JSON格式存储 - 那么您需要一个链接表。 首先,您需要表PIANO_KEYS,您将按照排序顺序存储所有36个键,如下所示:
ID || PIANO_KEY || SORT_ORDER
此表中的记录如下所示:
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