在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/數(shù)據(jù)庫/ 數(shù)據(jù)庫如何儲存“時間段”才比較合理?

數(shù)據(jù)庫如何儲存“時間段”才比較合理?

在開發(fā)中,有一些場景我們需要將一個時間段的信息存儲到數(shù)據(jù)庫中,比如說:一個事件有開始時間和結(jié)束時間,我們可以在數(shù)據(jù)庫中用類似 startDate 和 endDate 這樣的兩個字段來儲存。但是如果這個時間段是周期性的或者說是間斷性的。

比如說:

儲存一個課程的上課時間,這個課程是每周一、每周三、每周五上課

這樣的話,數(shù)據(jù)庫的表結(jié)構(gòu)應(yīng)該如何設(shè)計才比較合理呢?

創(chuàng)建7個布爾值類型的字段表示周一到周日?

回答
編輯回答
玄鳥

使用兩張表去設(shè)計會有更好的擴展性。
1.課程表,記錄課程的相關(guān)介紹
2.排課表,記錄上課開始時間,結(jié)束時間等

這樣的時間方便以后新增的需求,比如說統(tǒng)計功能,又或者以后會新增簽到功能。

所以我的意思是…使用一張表專門去記錄時間段,有一個一對多的關(guān)系。

2018年9月17日 16:40
編輯回答
骨殘心

因為我只看到一這么一個需求,我覺得你可以使用二進(jìn)制的辦法進(jìn)行計算。

比如一三五上課,那么存儲的二進(jìn)制的數(shù)據(jù)為10101000;

然后每次查詢星期三是否有課:

select * from table where date & 1 << 2;

上面的SQL我沒執(zhí)行過。僅僅是改寫。

參考:

clipboard.png

2017年12月4日 02:38
編輯回答
夏木

都是按需求來的呀
就像你說的,如果只有一段時間,就可以開始時間+結(jié)束時間,也可以開始時間+持續(xù)時長

      如果是周期性的多段時間,就可以按周期設(shè)置天

那如果要設(shè)計一個兼容各種模式的,那可能就會復(fù)雜一些
可讀性、空間、速度都是此消彼長的

2017年6月22日 12:29