如何为此方案正确设计Z架构?

时间:2015-04-19 17:58:49

标签: formal-methods z-notation

我发现的所有示例只有2个声明such as name and date OR members and telephone。但是,我的情况是:

  

我想创建一个名为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 个答案:

答案 0 :(得分:1)

在您的规范中,例如purposeschedule之间没有任何关联。您可以通过将人员映射到任意次数的方式定义schedule,目的是将人员映射到任意数量的单词。但是没有办法告诉这个人约会的目的是什么目的。

我想你想要一次约会有时间和目的。我的建议(实际上有许多方法可以实现这一点)是为约会引入一种数据类型,例如:有载体集:

[APPOINTMENT]

然后,您可以指定一个人具有任意数量的约会:

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

对于每个约会,您可以指定其时间和目的:

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

所以这不是您在架构中指定的所有内容,但我不确定如何解释,例如您的规范的objectavailability。但我认为将约会本身作为对象的基本方法在大多数情况下都会有所帮助。

另一种方法不是引入类型APPOINTMENT,而是定义模式Appointment并将其用作记录数据类型。