設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

tag 標(biāo)簽: 經(jīng)驗(yàn)談

相關(guān)日志

分享 淺談“汽車進(jìn)銷存系統(tǒng)”之二:表設(shè)計(jì)(上)
roych 2016-2-19 12:31
從原表中,我們可以很清晰地分出幾塊: 1、 車輛信息(型號、底盤號碼等等)。 2、 物流信息(進(jìn)庫日期、銷售日期、調(diào)撥日期等等)。 3、 客戶信息(購車用戶、手機(jī)號碼等等)。 4、 銷售信息(銷售價(jià)格、終端價(jià)等等)。 5、 退貨信息(退貨原因等)。 6、 供貨商信息(供貨商名稱)。 我們先把較為清晰的分離出來: 客戶信息、供貨商信息和車輛信息 。 客戶信息表的基本字段設(shè)置如下: 客戶名稱、手機(jī)號碼、固定電話、地址、郵政編碼、聯(lián)系人 (如果仍需要更細(xì)化,則根據(jù)實(shí)際來增加字段)。 這樣設(shè)置就夠了嗎?當(dāng)然不是了。主鍵呢?有些新手可能會(huì)說,客戶名稱呀。 如果同一個(gè)客戶,由不同的聯(lián)系人來購買的時(shí)候怎么辦?聯(lián)合主鍵啊。這自然沒問題,問題是,這樣會(huì)不會(huì)太復(fù)雜了呢?其實(shí),用一個(gè)客戶 ID 字段(自動(dòng)編號)設(shè)置為主鍵就可以解決這個(gè)問題了。 供貨商信息設(shè)置類似,不過由于供貨商有業(yè)務(wù)來往,因此可以加上開戶行等字段,這里不再贅述。 車輛信息字段設(shè)置。將底盤號碼、型號、發(fā)動(dòng)機(jī)型號等屬性設(shè)為字段,是毫無疑問的。這里需要詳細(xì)說明的是幾點(diǎn): 1、 外鍵的設(shè)置。為了區(qū)分哪輛車是哪個(gè)供貨商提供的,供貨商 ID (有重復(fù)索引)顯然是不二之選,由此建立起一對多的關(guān)系。 2、 關(guān)于冗余字段。仔細(xì)留意,你會(huì)發(fā)現(xiàn)這個(gè)表并不符合第三范式。例如,驗(yàn)車員并不依賴于車輛信息而存在。再如,進(jìn)庫日期、調(diào)出日期、調(diào)入日期等等幾個(gè)日期字段更不用說了。 先說驗(yàn)車員字段。如果按第三范式,這個(gè)字段顯然應(yīng)該被剔除出去。那么,把驗(yàn)車員跟車輛信息聯(lián)系起來不外乎兩個(gè)方法: a、 建立一個(gè)驗(yàn)車記錄表。 b、 以驗(yàn)車員 ID 作為外鍵,與職員表建立一對多關(guān)系。 增加一個(gè)表,對數(shù)據(jù)庫體積的影響還是比較大的,這就要考慮其必要性了。也就是說,這個(gè)表的重要性到底有多大,才是建表的先決因素。很明顯,相較之下, b 方法更佳。 但我還是棄用,而是直接使用了驗(yàn)貨員姓名字段。為什么呢? 這時(shí)候,我們就應(yīng)該從業(yè)務(wù)和技術(shù)層面上來理解了。 如果使用 b 方法,那么很多查詢,你都不得不連上職員表!憧偛荒茏層脩粲涀∶總(gè)驗(yàn)車員的 ID 吧?另外在窗體的查詢條件上,設(shè)置控件也是個(gè)問題,你不得不使用 2 列組合框,代碼也更加復(fù)雜。我們沒必要為了完全遵循第三范式而把問題復(fù)雜化,是吧? 同樣地,增加那幾個(gè)日期字段,也是出于業(yè)務(wù)的考慮的。 這幾個(gè)均屬于流水記錄信息。為這幾個(gè)字段設(shè)置采購進(jìn)庫表、調(diào)撥出庫表、調(diào)撥進(jìn)庫表、銷售出庫表和退貨進(jìn)庫表,自是沒問題,甚至可能更加清晰。但是必須要考慮到: a、 庫存計(jì)算。由于表較多,因此庫存計(jì)算時(shí),必須按進(jìn)庫和出庫兩類進(jìn)行聯(lián)合查詢,然后再相減,從而得到實(shí)際庫存。 b、 重復(fù)計(jì)算。假定某輛車進(jìn)庫后調(diào)撥到分銷,分銷賣不出去,退回總部,總部賣出去,又被退貨……那么,在設(shè)計(jì)查詢時(shí),就得留意這個(gè)問題,以免一輛車被統(tǒng)計(jì)多次。 如果我們只關(guān)注結(jié)果,而不太關(guān)心過程的話,那么就可以增加這幾個(gè)冗余字段來代替這幾個(gè)表。實(shí)現(xiàn)思路:對車輛的每個(gè)過程更新對應(yīng)的日期字段,來表示其當(dāng)前狀態(tài)。 事實(shí)上,這些應(yīng)該在需求分析時(shí)就要考慮的了。例如,增加“選擇”字段,可以為了方便用戶操作。再如,庫存計(jì)算。像上面那樣的設(shè)置和計(jì)算是一種方法。另一種方法就是只設(shè)置一個(gè)進(jìn)庫表,只要出庫(例如調(diào)撥出庫、銷售出庫)就更新記錄。也就是說,進(jìn)庫表就是實(shí)時(shí)庫存表。不過,這樣一來,當(dāng)返修情況較多時(shí),就不方便統(tǒng)計(jì)數(shù)據(jù)以便改善了。 表字段設(shè)計(jì),既要考慮到業(yè)務(wù)需求,又要考慮技術(shù)可行性。其中技術(shù)層面是短板。即便有完整的開發(fā)團(tuán)隊(duì),仍不能保證所有需求都能實(shí)現(xiàn)。因此,對于不太合理的業(yè)務(wù),應(yīng)該在管理上加以改善。軟件只能優(yōu)化流程,無法管理企業(yè)。
個(gè)人分類: 隨便說說|3498 次閱讀|0 個(gè)評論
分享 淺談“汽車進(jìn)銷存系統(tǒng)”之一:實(shí)體分析
熱度 1 roych 2016-2-3 17:08
估計(jì)這段時(shí)間很多人都下載這個(gè)例子并看了。 實(shí)話說,做得很一般,一方面是對于那個(gè)需求描述不清楚,對業(yè)務(wù)不太了解。另一方面則是很久沒做軟件了,催得比較急,于是就胡亂做點(diǎn)算是交差了。 不過,不管怎么說,還是花了些心思做的。所以,我想,還是可以和新手們一起聊聊,怎么去開發(fā)一個(gè)小系統(tǒng),或者說是小程序吧。一方面作為一個(gè)總結(jié),另一方面,如果新手能借鑒部分思路,少走一些彎路,我想也是一件比較愉快的事情吧。 我向來比較啰嗦。因此, 這個(gè)系列文章,很需要 耐性,如果沒有耐性,可以就此打住。 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- MM說,想做一個(gè)進(jìn)銷存系統(tǒng),以便了解庫存,業(yè)務(wù)員績效考核等等。 從理論上講,進(jìn)銷存,需要的實(shí)體,顧名思義,當(dāng)然要包括 進(jìn)庫表 , 銷售表 和 存余表 了,自然,還要有 產(chǎn)品表 。 以這個(gè)作為基礎(chǔ)數(shù)據(jù)延伸開來, 自然會(huì)想到。以銷售表來說,應(yīng)該需要一個(gè)銷售員的列表,——這一點(diǎn),我們可以增加一個(gè) 職員表 來完成。而購買的客戶,當(dāng)然也需要一個(gè) 客戶表 了。如果客戶對產(chǎn)品不滿意,那么就涉及到退貨,因此還需要增加一個(gè) 退貨表 。 最后就是分銷的問題,也就是 調(diào)撥情況,據(jù)此而創(chuàng)建 調(diào)撥明細(xì)表 。——為此,還需要增加一個(gè)(母) 子公司列表 。 至此,基本的表就定下來了。 對了,庫存表,好像沒提到,是嗎? 是的。關(guān)于庫存,其實(shí)涉及到數(shù)據(jù)的邏輯。這一點(diǎn)我們在后面再談。 最后,我們來看看,MM提供給我的原表【以下為字段名稱】。大家思考下,這樣設(shè)計(jì)表有沒有問題,如果有,應(yīng)該怎么改: 進(jìn)庫ID 供貨商名稱 進(jìn)庫日期 型號 發(fā)動(dòng)機(jī)型號 底盤號碼 發(fā)動(dòng)機(jī)號碼 顏色11 合格證型號 出廠日期 類別 進(jìn)庫登記編號 收貨單位 調(diào)出時(shí)間 調(diào)入單位 購車用戶 終端用戶 銷售員 銷售型號 是否定車 用戶地址 郵編 聯(lián)系人 手機(jī)號碼 聯(lián)系電話 購車日期 銷售發(fā)票號碼 銷售價(jià)格 銷售類別 進(jìn)項(xiàng)發(fā)票號碼 進(jìn)項(xiàng)發(fā)票日期 進(jìn)項(xiàng)發(fā)票價(jià)格 終端價(jià) 退車回供方日期 退車原因 開票促銷 銷售員實(shí)銷促銷 驗(yàn)收人ID
個(gè)人分類: 隨便說說|3155 次閱讀|1 個(gè)評論

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-13 19:19 , Processed in 0.065671 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部