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

データモデリングの調査(賢明なデータベースを一緒に混乱させる方法)

    驚いたことに、ほとんどの回答は質問を見逃しているようですが、これを試してみます;

    これはデータモデリング(データベース内の一連のテーブルをまとめて、必要なものを可能な限り最良の方法で表現する方法)と呼ばれ、質問するのに愚かなことはありません。目覚めている時間のすべてをデータモデルの調整と設計に費やしている人々がいます。それらはあらゆるシステムの幸福にとって非常に重要であり、実際、ほとんどの人がそれらを信用することよりもはるかに重要です。

    あなたは正しい道を進んでいるようです。エンティティを定義し、それぞれにテーブルを作成することは常に良いヒントです。そのため、この場合、ユーザー、プレイリスト、曲などがあります。このようにテーブルを定義します。ユーザー、曲、プレイリスト。

    次のことは、フィールドとテーブルの名前を定義することです(そして、おそらく上記で提案された単純な名前は、まあ、単純です)。偽の名前空間を導入するものもあります(つまり、USERだけでなくMYAPP_USER)。特に、データモデルが将来同じデータベースで拡張および拡張されることがわかっている場合(または、これが避けられないことを知っているため)、他の人はただ突っ込みます。必要なものは何でも。

    大きな問題は常に正規化 についてです。 そして、その周りのさまざまな問題、パフォーマンスと適用性のバランス、そしてこの主題について書かれた本がたくさんあるので、私があなたに意味のある答えを与える方法はありませんが、私にとっての要点は;

    テーブル内のデータフィールドは、どの時点でそれ自体のテーブルに値するのでしょうか。たとえば、データをどのように分割するかに応じて、1つ、2つ、または6つのテーブルだけでアプリケーションを作成できます。ここであなたの質問が本当に出てくると思います。

    私はあなたがあなたの仮定でかなり正しいと言うでしょう、覚えておくべきことは一貫した命名規則です(そして識別子に名前を付ける方法についての意見がたくさんあります)。あなたのアプリケーション(上記の表を使用)については、私が行います;

    USER { id, username, password, name, coffee_preference } 
    SONG { id, artist, album, title, genre } 
    PLAYLIST { id, userid } 
    PLAYLIST_ITEM { id, songid, playlistid, songorder }
    

    これで、SQLを使用して、ユーザーのすべてのプレイリストを取得できます;

       SELECT * FROM PLAYLIST WHERE userid=$userid
    

    または、プレイリスト内のすべての曲を取得します;

       SELECT * FROM SONG,PLAYLIST_ITEM WHERE playlist_item.playlistid=$playlist.id AND song.id=playlist_item.songid ORDER BY playlist_item.songorder
    

    等々。繰り返しになりますが、このテーマについては本が書かれています。それは、技術的な解決策を書き留めながら、明確かつ意味的に考えることがすべてです。そして、一部の人々はこれだけをキャリアとして持っています(DBAのように)。特に私がここに書いたことについては、たくさんの意見があります。頑張ってください。



    1. リンクサーバーを作成できません-SQLサーバーとmysql

    2. PHPのテーブルに複数の値を挿入する方法

    3. java.sql.SQLException:接続が閉じられました[POOL-HikariCP]

    4. カンマ区切りの値を列に分割する方法