2011-07-19 10 views
1

私はいくつかの音楽アルバムに関する情報を保存する必要があるプロジェクトがあります。私は、次のフィールドを持つ単純なアルバムテーブルを考えています:アルバムのトラックリストをデータベースに保存する

| id | name | artist |description| year | 

しかし、私はトラックリストを保存する最良の方法は何だろうと思っています。私はアルバムテーブルに別のフィールドを持っていて、トラックリストデータ(トラック名、トラックランタイム)をJSONオブジェクトなどで保存しておき、それをプルアウトしてアプリケーションで解析するか、別のフィールドを持つことができますテーブルには、次のフィールドを持つtracklistsと呼ば:

| id | name | album | runtime | 

albumフィールドに基づいて、それを引き出します。

どうやってこれをやりますか?

答えて

-2

あなたが言ったように私はそれを分解し、アルバムidに1対1の関係を持っています。かなりクリーナーだと思います...

+0

実際には? 1対1の関係? –

+0

私は1つの多くを意味しました。 – luckytaxi

4

別のテーブル。

アルバムフィールドalbum_idを呼び出し、それをアルバムテーブルに戻す外部キーにします。

基本的に、すべてを1つのテーブルに保存する必要はありません。

これは、トラック関連のデータを操作することをより困難にします。原子的にデータを処理していないからです。編集したいものとは無関係の他のデータを含むフィールド全体を混乱させる必要があり、おそらくデータの破損につながる可能性があります。

もう1つの理由は、コンセプトを良好な抽象化に分離することで、将来のプログラマーや他のプログラマーがあなたに明確に理解できるようにすることです。例えばトラックにはどこに行くのですか?さて、私はトラックテーブルに行きます。どこでアルバムを操作するのですか?さて、私はアルバムのテーブルに行きます。

0

2番目のオプションは間違いありません。 jsonオブジェクトを使ってトラックを検索する方法について考えてみてください。これは、2番目のテーブルではるかに簡単になります!

0

おそらくこのように見えます(テストされていません)?

CREATE TABLE album 
(   
    album_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,   
    description VARCHAR(400),  
    artist VARCHAR(400), 
    description VARCHAR(400), 
    year_released NUMBER(4), 
); 

CREATE TABLE track 
(   
    track_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    album_id INT,   
    description VARCHAR(100),   
    order_no NUMBER(3), 
    runtime NUMBER(6), 
    INDEX albumfk (album_id), 
        FOREIGN KEY (album_id) REFERENCES album(album_id) 

); 
関連する問題