2015-04-19 77 views
0

我發現的所有例子只有兩個聲明such as name and date OR members and telephone。但是,我的情況是這樣的:如何正確設計此方案的Z模式?

我想創建一個名爲AppointmentDB的Z模式。 AppointmentDB 保持約會的細節,目的,參加者和時間表


我取(編者):

有5點聲明和1謂詞

|--AppointmentDB---------------- 
|attendees : P Person 
|appointments : P APPOINTMENT 
|hasAppointment : Person ↔ APPOINTMENT 
|schedule : APPOINTMENT → DateTime 
|purpose : APPOINTMENT → Report 
|----------------------------- 
|attendees ⊆ dom(hasAppointment) 
|----------------------------- 

正如你所看到的,我試圖將APPOINTMENT和其他所有屬性聯繫起來。我的模式是否正確或完整,或者如何進一步優化它?另外,我如何知道從關係中我應該考慮哪個關係在謂詞部分內部定義?

回答

1

在您的規格中有例如purposeschedule之間沒有鏈接。您定義schedule的方式是將一個人映射到任意次數,並將用戶映射到任意數量的單詞。但是無法告訴人們在什麼時候預約了目的。

我想你想有一個約會有一個時間和目的。我的建議(實際上有很多方法可以實現這一點)是爲約會引入數據類型,例如,與載體組:

[APPOINTMENT] 

然後你可以指定一個人的任命任意數量的:

|-------------------- 
| appointments: P APPOINTMENT 
| hasAppointment: Person <-> APPOINTMENT 
|---- 
| appointments = ran(hasAppointment) 
|-------------------- 

而對於每個約會,你可以指定它的時間和目的:

|-------------------- 
| schedule: appointments --> DateTime 
| purpose: appointments --> Word 
|-------------------- 

所以這不是你在模式中指定的所有東西,但我不確定如何解釋例如objectavailability你的規格。但我認爲將約會本身作爲對象的基本方法在大多數情況下都會有所幫助。

而不是引入類型APPOINTMENT的另一種方法是定義模式Appointment並將其用作記錄數據類型。

+0

我有幾個問題,'hasAppointment = ran(約會)是什麼意思?似乎不兼容coz hasAppointment是一種關係類型,但運行(約會)看起來像一個集合類型?第二,'schedule:appointmentments - > DateTime'應該是'schedule:約會<-> DateTime',對不對? – Mark

+0

1st:這是一個錯字,我會解決這個問題。第二:不,我的意圖是表達一次約會應該只有一次,因此總功能是合適的。但是,也許這不符合你的系統? – danielp

+0

啊,我現在看到...是的,這是我的想法。所以單箭頭意味着一對一的關係,雙箭頭意味着多對多的,呃? – Mark