目的: 葉子管理和工資系統要求在數據庫中存儲的官方週末假日計劃被引用,同時爲每個員工產生月薪組織。生成靈活的數據庫模式來存儲週末計劃是目標。工資系統:用於週末休息計劃的靈活存儲的數據庫結構
問題: 數據庫模式應該足夠靈活以允許週末定義的變化。在我們的場景週末可以定義爲:
1日
2.週日+ 1或第2或第3或第4個週六
3日+(第1和第2)或(第1和第3)或(第1和第4)或(第二和第三)或(2和第4)或
(第三和第四)週六
4日+所有星期六
目的: 葉子管理和工資系統要求在數據庫中存儲的官方週末假日計劃被引用,同時爲每個員工產生月薪組織。生成靈活的數據庫模式來存儲週末計劃是目標。工資系統:用於週末休息計劃的靈活存儲的數據庫結構
問題: 數據庫模式應該足夠靈活以允許週末定義的變化。在我們的場景週末可以定義爲:
1日
2.週日+ 1或第2或第3或第4個週六
3日+(第1和第2)或(第1和第3)或(第1和第4)或(第二和第三)或(2和第4)或
(第三和第四)週六
4日+所有星期六
也許存儲這樣 11111的方案 - 意味着週日和所有SATS 10000 - 僅意味着星期天 11010 - 表示星期天和第一和第三天
所以第一個號是星期天,第二個 - 第一個星期六,等
,你可以使用按位或檢查像
週六
SELECT *檢查1 FROM table_name的一些值,其中holiday_scheme | 01000> 0
希望有所幫助。
按位邏輯可以很聰明,但我相信該方案不能很好地擴展,因爲此表達式在表掃描中可能會進行翻譯。如果'table_name'很大,它可以在連接上懲罰你很多。
如果您創建work_day_schedule並將該計劃關聯到'table_name'(例如:employee),那可能會更好。現在,對work_day_schedule進行表掃描不會有太大的傷害,你可以做你想要的按位魔法。
按位邏輯太被低估了! – EtherealMonkey 2010-10-21 18:07:13
我不確定你的意思。在這種情況下它是好還是不是? – 2010-10-22 08:14:35
我認爲這是一個很好的計劃。當我開始閱讀這個問題時,我立即和你有同樣的想法。這是我想到的一個很好的例子(在C#中)使用此方法驅動MySql:http://geekswithblogs.net/BlackRabbitCoder/archive/2010/07/22/c-fundamentals-combining-enum-values-有位flags.aspx – EtherealMonkey 2010-10-23 00:23:03