PostgreSQL , tsrange , 範圍 , exclude using , 排他限制 , btree_gist , 會議室預定 , 時間重疊 , 空間重疊
PostgreSQL 範圍、數組、空間類型(range, array, geometry),都有交叉屬性,例如時間範圍:7點到9點,8點到9點,這兩個内容是有重疊部分的。例如數組類型:[1,2,3]和[2,4,5]是有交叉部分的。例如空間類型也有交叉的屬性。
那麼在設計時,實際上業務上會有這樣的限制,不允許對象有相交。
例如會議室預定系統,不允許兩個人預定的會議室時間交叉,否則就有可能一個會議室在某個時間段被多人共享了,業務上是不允許的。
那麼如何做到這樣的限制呢?
PostgreSQL 提供了exclude限制,可以實作這個需求。
範圍、數組、空間類型的相交操作符如下:
1、建立btree_gist插件.
2、建立會議室預定表
3、預定會議室,如果同一個會議室輸入的時間不允許預定(有交叉),則自動報錯。實作強限制。
4、查詢某個時間段還有哪些會議室能預定
會議室ID表,假設有50個會議室。
假設使用者要預定 某一天:7點到9點的會議室,這樣操作即可:
速度杠杠的。開發也友善了。
使用PostgreSQL,時間範圍類型、exclude限制,很好的幫助業務系統實作會議室預定的強限制。
使用except文法,很友善的找到需要預定的時間段還有那些會議室是空閑的。
開不開心,解放開發人員的大腦。
<a href="https://www.postgresql.org/docs/10/static/sql-createtable.html#SQL-CREATETABLE-EXCLUDE">https://www.postgresql.org/docs/10/static/sql-createtable.html#SQL-CREATETABLE-EXCLUDE</a>