Rumah  >  Soal Jawab  >  teks badan

数据结构 - 如何在MongoDB/NoSQL中设计篮球联赛的数据模型?

本人是mongoDB新手,看过了官网上关于嵌入式非规范化数据库的介绍,但是面对实例的时候仍然是一头雾水.(官网上面的实例只有两三个collection,感觉比实际应用简单太多)
每年一个赛季,一个联赛对应多只队伍,每个队伍有多名队员.队员属性有身高体重所属球队球衣号码场上位置(队员有可能转会,但某一特定时间只属于一个球队).联赛有常规赛,季后赛之分,每场比赛有主/客队,需要记录下每个上场队员的得分/篮板/助攻/盖帽/抢断以及每一个事件的时间戳.每场比赛对应多个新闻报道文章
典型应用场景:
最新10场比赛的主/客队得分,胜负
所有球队的积分排名
所有球队在本赛季的平均得分/篮板/助攻/盖帽/抢断 前10名排行榜
所有球员在本赛季的平均得分/篮板/助攻/盖帽/抢断 前10名排行榜
某场比赛中主客队球队本场比赛的得分篮板助攻命中率等
某场比赛中主客队球员在本场比赛的得分篮板助攻命中率等
所有球员在某个赛季中的各项数据排行
某个球员在各个赛季中的平均各项数据(转会过的球员有可能在不同球队)

可否给出一完整的数据模型结构设计,万分感谢!
一些想不明白的问题:
是否应该把球员嵌入到球队中?如何处理转会问题?
是否应该把每场比赛的数据嵌入到每场比赛中?如果是,又如何关联球员与每一次得分/..事件的关系?
在哪里非规范化数据,感觉不管怎么设计,在汇总球队,或者球员的历史数据的时候,和做排名的时候,都要扫描整个数据库,这不科学吧...
在哪里做索引可以显著的提高性能?

这个应用场景到底合适不合适用nosql.................

曾经蜡笔没有小新曾经蜡笔没有小新2733 hari yang lalu618

membalas semua(1)saya akan balas

  • PHP中文网

    PHP中文网2017-04-25 09:06:40

    Prinsip utamanya adalah untuk mereka bentuk berdasarkan Corak Akses Nasib baik, kami sudah mempunyai senario aplikasi biasa.

    1. Hubungan satu-dengan-banyak antara pasukan dan pemain boleh dibenamkan atau dipisahkan terutamanya pada sama ada kedua-dua data ini sering digunakan bersama. Contoh penggunaannya bersama-sama: Soalan dan jawapan SegmentFault juga adalah satu-ke-banyak, tetapi sering dipaparkan bersama-sama. Jika tidak, anda boleh mengasingkannya dan menambah nama pemain, _id, masa bermain dan maklumat asas lain kepada pasukan Penyahnormalan ini akan memerlukan satu lagi tempat untuk dikemas kini apabila ia perlu dikemas kini. Tetapi oleh kerana kekerapan kemas kini maklumat ini (seperti pemindahan) adalah sangat rendah dan ia banyak dibaca, ia masih berbaloi.

    2. Statistik. Jika anda mengira semula data sejarah pemain, tidak kira apa inventori data yang digunakan, anda perlu merentasi keseluruhan pangkalan data, bukan? Ini adalah satu lagi pertukaran sebelum membaca dan menulis. Jelas sekali, kemas kini data adalah lebih kurang daripada pertanyaan, jadi caching data statistik adalah bermakna. Tambahan pula, beberapa statistik adalah tetap, seperti statistik untuk pasukan dalam musim tertentu. Apabila mengemas kini, ia boleh dikemas kini dalam masa nyata, atau beberapa hasil perantaraan boleh dicache, seperti nilai purata daripada jumlah nombor dan masa untuk membantu pengiraan. Sebagai alternatif, mengemas kini sekali sehari selepas setiap permainan adalah kemungkinan.

    3. Data setiap permainan adalah berkaitan dengan permainan dan pemain, tetapi adakah ia sering disoal dengan yang tertentu? Jika tidak, tetapi hanya untuk perkhidmatan statistik, ia juga baik untuk meletakkannya dalam koleksi berasingan.

    4. Indeks boleh membantu anda mencari data dengan lebih pantas, tetapi ia tidak dapat membantu anda mengurangkan set data yang terhasil. Selepas model data direka bentuk, adalah wajar untuk memilih indeks.

    balas
    0
  • Batalbalas