2014-02-27 40 views
0

我公司銷售在線課程。我們將用戶添加到登錄表中。當用戶購買課程時,我們輸入購買表。正式登錄和客人的數據庫設計方法

UserID | CourseID | PurchaseDate

目前,採購表中有基於用戶ID登錄表參照完整性。

我們希望爲不想註冊的客戶添加訪客選項。我想保留購買表中的所有購買。對此有最佳做法嗎?

我可以在Purchase表中添加GuestID,但在此之前,我想知道其他人的想法。

+0

是「客戶選項」在用戶想要升級他的訪客帳戶作爲完全使用的一些試用期後將始終保持爲訪客或停用,您是否考慮過這些問題?或者這就像通用的Guest賬戶一樣,所有用戶都可以使用它來登錄,而且目前還沒有將來擴展的願景。您還可以創建用戶作爲常規用戶登錄,只需在登錄表上添加一個標誌,指示用戶當前是否爲「訪客用戶」。這是Login/User而非Purchase的財產。 –

+0

他們是一個陣風,直到他們決定創建一個登錄。他們決定是否要這樣做。 – Nick

回答

1

爲了實現關係完整性和業務邏輯,我可以根據需求創建訪客用戶,然後像普通用戶一樣使用。

唯一要做的事:創建一個IsGuest標誌,它是一個隨機的名稱,如'guest'+ guid()。對於所有問題,他們都可以像其他用戶一樣處理。

也許一個優勢是可以利用用戶狀態。它只需設置IsGuest標誌並更新用戶名即可。

0

請記住您的現有系統。我將創建一個表,表示Person將成爲主表,USER將成爲具有一對一關係的子表。

現在Person表將被視爲有或沒有憑證的任何客人,但USER已經代表具有憑證的人。

Person(PersonID primary key) -> User(UserID as primary key referencing Person.PersonID)

所以,如果我要創建誰是註冊一個用戶,然後我會作出進入兩個表,即人,然後用戶。如果一個人不感興趣,那麼只會在Person表中輸入一個條目。

Purchase(PurchaseID, CourseID, PersonID as Foreign key)它間接引用用戶以及一對一的關係。

例如。 enter image description here

考慮圖像中的EntityID = PersonID。我使用了我的數據庫的一些設計。

在OOP方面,我可以把它建模爲

Class Person 
{ 
int PersonID; 
} 

class User:Person 
{ 
string UserName; 
string Password; 
} 

class PurchaseOrder 
{ 
int PurchaseOrderId; 
int CourseID; 
int PersonId; 
} 

我覺得這是什麼會令你的系統更可擴展性和減少冗餘。