简体   繁体   English

如何在合金中建立有效的数据库模型?

[英]How to model a consitent database in alloy?

Alloy newbie here. 合金新手在这里。 I'm trying to model a medical database containing user and some medical information. 我正在尝试建立一个包含用户和一些医疗信息的医疗数据库。

sig User{
    name: one  String,
    surname:  one String,
    socialNumber:  one String,
    address:  one String,
    age: one Int,   
    registration: one UserCredential,
    healthStatus: one HealthInformation
}{
    age>0
}
sig UserCredential{
    user: one String,
    pass: one String,
    mail:  one String
}

sig HealthInformation{}


sig Data4Help{
    users: some User,
}

pred show(d:Data4Help){
    #d.users>1
}

run show for 10

The analyzer tell me the model is inconsistent: 分析器告诉我模型不一致:

Executing "Run show for 10" Solver=sat4j Bitwidth=4 MaxSeq=7 SkolemDepth=1 Symmetry=20 5448 vars. 执行“ 10个放映节目”求解器= sat4j位宽= 4 MaxSeq = 7 SkolemDepth = 1对称= 20 5448 vars。 510 primary vars. 510个主要变量。 12578 clauses. 12578条。 16ms. 16毫秒。 No instance found. 找不到实例。 Predicate may be inconsistent. 谓词可能不一致。 0ms. 0毫秒。

Can you guys tell me why? 你们能告诉我为什么吗? All I want is having the database "Data4Help" linked to some users, probably the definition of the relation is incorrect but I don't know why. 我想要的只是将数据库“ Data4Help”链接到某些用户,该关系的定义可能不正确,但我不知道为什么。 Thank you 谢谢

The problem is that Alloy has some troubles with Strings. 问题在于合金在琴弦方面有一些麻烦。 By default, the String signature defines an empty set of atoms. 默认情况下,字符串签名定义了一组空原子。 If you want to use Strings in your model, you will have to populate that set with "your own Strings". 如果要在模型中使用字符串,则必须使用“您自己的字符串”填充该集合。

See How to use String in Alloy? 请参阅如何在合金中使用弦乐?

In your model, you could add this simple fact 在模型中,您可以添加以下简单事实

fact initPoolOfString{ 
   String in "insert"+ "your"+"dummy" + "strings" + "here"
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM