天天看點

會議室預定系統實踐(輕松解放開發) - PostgreSQL tsrange(時間範圍類型) + 排他限制

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>

繼續閱讀