【问题标题】:Advice for Relationship between Album, Artist, Track and Label an (music stuff)关于专辑、艺术家、曲目和标签之间关系的建议(音乐素材)
【发布时间】:2019-03-16 20:28:06
【问题描述】:

一张专辑可能有很多这样的艺术家release

但一张专辑可能只有一位艺术家,例如this

一个标签有很多专辑,例如this

我对关系有点困惑,另一方面,一张专辑有很多曲目!我对一切都很困惑,因为另一边有一个标签(注册音乐的公司)表,标签有很多专辑!

我们将不胜感激。

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    我建议使用以下架构:

    艺术家

    • 身份证
    • 姓名

    专辑

    • 身份证
    • 姓名

    标签

    • 身份证
    • 姓名

    跟踪

    • 身份证
    • 姓名
    • 长度

    albums_has_artists

    • 身份证
    • 专辑编号
    • artist_id

    label_has_albums

    • 身份证
    • label_id
    • 专辑编号

    album_has_tracks

    • 身份证
    • 专辑编号
    • track_id

    如果album_has_artists rows > 1 => 显示“各种艺术家”。

    【讨论】:

    • 谢谢,很高兴你注意到“各种艺术家”,因为我有一个计划,另一种类型的发行是,单曲和 EPS,一首曲目 = 单曲,两首或四首曲目(有时)是每股收益...
    • 另一个问题,你为什么在专辑和曲目之间建立多对多关系?一张专辑可能有很多曲目对吗?但是Track怎么能同时属于多个发布呢?我有点困惑
    • 是的,我这样做是因为一张专辑有很多曲目。您如何看待发布?和专辑一样吗?否则我会创建一个新表releaserelease_has_tracks。另一种解决方案是将release_type 列添加到album 表中,如果专辑是单张专辑、EP 专辑或完整专辑,您可以在其中存储一个值。
    • @Mwthreex 如果对您有帮助,请接受此答案。
    【解决方案2】:

    我认为以下示例将帮助您了解专辑、艺术家、曲目和标签之间的关系。考虑下面给出的模型

    class Label extends Model
    {
        public function Albums()
        {
            return $this->hasMany(Albums::class, 'album_id', 'id')->select('id') // select will contain whatever data you want from album );
        }
    }
    
    class Albums extends Model
    {
        public function Artists()
        {
            return $this->hasMany(Artists::class, 'artist_id', 'id')->select('id') // select will contain whatever data you want from table artists);
        }
    
        public function Tracks()
        {
            return $this->hasMany(Tracks::class, 'track_id', 'id')->select('id') // select will contain whatever data you want from table tracks);
        }
    }
    

    即使只有一张专辑有很多艺术家,它也会被考虑在 hasMany 关系中。

    【讨论】:

    • 正确。 Has Many 是用词不当,因为它实际上意味着有零个或多个。
    • 谢谢。我认为 Tracks 方法有错误,因为我认为这个属于专辑模型
    • @Mwthreex 尝试理解这一点:每个专辑都有很多曲目,因此在专辑模型中专辑与曲目有任何关系。现在考虑模型轨道: class Tracks extends Model { public function Albums() { return $this->belongsTo(Albums::class, 'album_id', 'id')->select('id') // 选择将包含任何内容您想要的专辑数据); } }
    猜你喜欢
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2013-03-21
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多