擁有5星評級資料庫表結構 如何才能更高效的使用

2022-10-06 02:00:09 字數 1813 閱讀 9904

產品資料庫設計時,經常遇到5星評價的情況,資料表如何設計才能即保證查詢效率,又能減少資料冗餘呢?

初步設計思路如下,請大家指正程式設計客棧。

一,最終效果,

二,表結構

複製** **如下:

create table if not exists `books` (

`id` int(8) not null auto_increment,

`title` varchar(50) not null,

`vote_1` int(8) unsigned not null,

`vote_2` int(8) unsigned not null,

`vote_3` int(8) unsigned not null,

`vote_4` int(8) unsigned not null,

`vote_5` int(8) unsigned not null,

`**grate` int(8) unsigned not null,

`amountofvotes` int(8) unsigned not null,

primary key  (`id`)

) auto_increment=1 ;

create table if not exists `users` (

`id` int(8) not null auto_increment,

`username` varchar(20) not null,

primary key  (`id`)

) auto_increment=1 ;

create table if not exists `votes` (

`uid` int(8) unsigned not null,

`bid` int(8) unsigned not null,

`vote` int(1) not null,

primary key (`bid`, `uid`)

) ;三,設計思路資料表分為兩個部分,

1,第乙個部分,表v其中uid和bid設為了主鍵,這樣防止乙個使用者多次投票的情況;

查詢時,可以使用,

複製** **如下:

平均tkxlv分:select **g(vote) from votes where bid = $bid;

評價總數: select count(uid) from votes where bid = $bid;

如果有時間排序的需求,可以再增加乙個時間戳字段。

2,第二部分,冗餘部分

vote_1到vote_5,僅記錄每乙個級別評分的數量,有評分了則+1;

**grate記錄平均分;

amountofvotes記錄總分;

其中**grate和amountofvotes通過計算vote_1到vote_5得到,這樣減少了對錶votes的大量查詢。

如果配合評論,那麼評論中增加關聯即可,

複製** **如下:

create table if not exists `comments` (

程式設計客棧;            `id` int(11) unsigned not null auto_increment,

`rating_id` int(11)  unsigned not null default 0,

&nbs            primary key ( `id` )

) 四,繼續優化需要思考的問題votes表中的資料量會是book中資料量的n倍,這種設計也便於votes的分表,不影響快速查詢。

本文標題: 擁有5星評級資料庫表結構 如何才能更高效的使用?

本文位址:

幾千萬記錄,資料庫表結構如何平滑變更?

繼續回答知識星球水友提問。問題域 資料量大 併發量高場景,如何在流量低峰期,平滑實施表結構變更?畫外音,一般來說,是指增加表的屬性,因為 如果是減column,公升級程式不使用即可 如果是修改column,程式相容性容易出問題 首先,一起看下有哪些常見方案。畫外音 alter table add c...

如何匯出db2資料庫的表結構和資料

對於db2資料庫,匯入和匯出表結構和資料其實很簡單,只需要用到db2look和db2move兩個命令即可。這兩個命令都需要在客戶端的命令列處理器 中執行,但對於資料庫伺服器和客戶端不在同一機器上的,需要借助catalog命令,來先完成遠端資料庫載入到本地,然後再進行匯出匯入操作。1 catalog ...

mysql如何比對兩個資料庫表結構的方法

在開發及除錯的過程中,需要比對新舊 的差異,我們可以使用git svn等版本控制工具進行比對。而不同版本的資料庫表結構也存在差異,我們同樣需要比對差異及獲取更新結構的sql語句。例如同一套 在開發環境正常,在測試環境出現問題,這時除了檢查伺服器設定,還需要比對開發環境與測試環境的資料庫表結構是否存在...