完全公开,这是针对大学课程的。我不希望有一个完整的答案,但会有所帮助。
我需要使用Z表示法为Item实体建模。这是描述:
Item:每个项目都有一个名称和唯一的ID,可用于唯一地描述该项目。一个项目还具有一个价格(正浮动)和一个类别。
部分要求是对这些实体进行建模,没有量词。
这就是我最终得到的,但是我不确定它是正确的:
这样的想法是,名称是字符串的某种组合,ID是一个正整数和所说名称的元组,价格和类别都映射了全部功能。
第一个谓词是确保价格为正,第二个谓词是确保ID的唯一性,即将域缩小为所有尚未分配的整数。 不过,我认为这是不正确的。
答案 0 :(得分:0)
您的方法的主要问题是,您尝试将有关整个系统(或其一部分)的信息放入单个项目的描述中。例如。您将价格指定为从id到float的映射-原则上很好-但是每个商品都没有这样的功能。
有很多指定方法,我展示了两种方法:
您有两种模式: Item
和Database
+-- Item -----
| id: ℕ
| name: String
| price: ℝ
| category: String
|----
| price ≥ 0
+----------
+-- Database -----
| items: ℕ +-> Item
|----------
通过这种方式,您可以将每个项目的ID从项目本身移走。当每个项目还有一个字段id
时,如果不使用量词来陈述items
应该将一个ID映射到具有相同ID的项目这一事实将很复杂。或者,当您仅使用一组项目时,如果不使用量词来描述两个项目必须具有不同的标识符,则描述起来会很复杂。
items
是一个函数,可以确保每个项目的ID的唯一性。
或者仅对项目的各个方面使用几个功能:
+-- Items -----
| ids: ℕ
| name: ids --> String
| price: ids --> ℝ
| category: ids --> String
+----------
但要说明一个事实,那就是所有的价格都必须在没有量词的情况下为非负数。也许可以将ℝ
替换为{ x:ℝ | x≥0}
。
一般说明:您是否需要使用ID进行计算?也许您可以使用[ID]
来引入类型。对于类别(例如[CATEGORY]
)也是如此。
这个名称不仅是一个字符串吗?但我认为这不是一组(无序的)字符串。