2013-06-05 21 views
1

這是一個設計問題。數據建模中將真人與應用用戶相關聯的最佳模式是什麼?

我需要拿出一個小型應用程序的數據模型,我正在尋找最好的方法。

業務我試圖模型的簡化版本具有以下實體:

  • 分配:這些項目一樣,他們有一個開始日期,結束日期和相關的一隊人
  • 工人:這些是執行任務的人。一個給定的工人一次只能關聯一個作業。許多工人可以同時關聯到相同的任務(對於大型項目)。
  • 經理:這個行業基本上很少有管理人員,他們負責在工作分配到新任務時負責人。

然後,是在Web應用程序的經理將用於管理誰做什麼,即其工作人員被分配到的任務。 Workers也將使用此應用程序來註冊與其分配相關的費用。

因此,在Web應用程序的上下文中,還會有用戶實體,並且工作人員和經理都將讓他們的用戶訪問該應用程序。

我的問題是: 什麼是支持這個(簡單)系統的最佳數據模型?

我想象這個模型:

  • 用戶(ID,用戶名,密碼,...)
  • PERSON(從用戶+姓名,電子郵件等繼承...)
  • MANAGER(從人繼承+的經理額外的字段只)
  • 工(從人+對工人的額外字段繼承只)

我不喜歡這種模式每個人都必須擁有一個用戶。也許今天發生在工作人員和管理人員身上,但是我會在這個系統中添加「客戶」,這個系統也會有相關人員不能訪問該網站,所以他們不會有用戶。

有沒有更好的方法?有沒有繼承的標準方法可能?


更新

好吧,基於該模型提出上述與這個特定的業務一些額外的信息完成,這裏的(基本)模型。

PERSON 
id 
email 
passmd5 
role_id 
firstname 
lastname 
... 

ROLE 
id 
description 

PERMISSION 
id 
description 

ROLE_PERMISSION 
role_id 
permission_id 

COMPANY 
id 
name 
contact_name 
contact_email 

ASSIGNMENT 
id 
customer_company_id 
start_date 
end_date 
location_lat 
location_lng 
location_description 

MACHINE 
id 
brand 
model 
description 

PERSON_MACHINE_EXPERTISE 
person_id 
machine_id 

以下是關於企業一些額外的信息,以幫助瞭解整個圖:

  • 的業務包括在發送人誰是在某種機械在世界各地不同地點的專家,給爲特定客戶提供服務。
  • 有些人是「專家」。
  • 有些人是「管理者」(可能只有一個,但可能會有更多)。
  • 有任務(基本上,這需要專家完成這項工作,有時不止一位專家)。
  • 有客戶,他們基本上是公司,而不是人。
  • 有機器。
  • 有關哪個人是哪臺機器的專家的信息。

有意義嗎?任何可能改善這一點的想法?

回答

1

要解決這個問題沒有繼承你也許可以定義一個Person類和Role類,與具有Role的List(或者基於域的需求,單一的一個)每Person。然後

經理和工人的概念將屬於一個Role類,與具有經理角色(經理)等人的工人角色一些人。這將簡化對所有對象的管理,因爲它們的狀態,權限等被修改爲更新系統中的角色。它還可以讓您靈活地添加新的Role,無需修改源代碼:簡單地創建Role的新實例,說客戶並將其分配給需要Person的任何人。

最後,你可以創建一個另外一個概念,稱之爲Permission,它定義了一個可以做Person工人經理有CanAccessWebApp許可(和客戶不)角色。這將爲您提供很大的靈活性,同時保持整體關係設計相當簡單。

+0

同意。這是「黨派角色」模式,這種類型的問題很常見。 – sfinnie

+0

我有點像這種方法。但我的客戶是公司,而不是人。所以也許我分開處理它們。請參閱下面的修改模型。 –

+0

以下型號?哪裏?無論如何,你最初提到'人',所以我就是人。不過,該設計可以被翻譯成處理公司。 – rae1

相關問題