我和我的教授就这个问题吵了起来,所以请给我你的意见。
原来的问题是:
这个脚本中有语法错误吗?
CREATE TABLE Dozent
( DozNr INTEGER PRIMARY KEY,
Name VARCHAR(30));
CREATE TABLE Prüfung
( DozentNr CHAR(3), StudentNr CHAR(6),
PRIMARY KEY (DozentNr, StudentNr),
FOREIGN KEY (DozentNr) REFERENCES Dozent(DozNr),
FOREIGN KEY (StudentNr) REFERENCES Student(MatrNr) );因此,显然存在一个错误,因为外键DozentNr被声明为CHAR,而它引用的主键是整数数据类型。我的第一个冲动是说,指定错误的数据类型是一个语义错误。我的教授说这是一个语法错误(当然没有任何解释)。
一些研究给我带来了这些定义:
语法规则指定如何对语言元素进行排序以形成有效的语句。因此,语法检查可以验证关键字、对象名称、运算符、分隔符等是否正确地放置在SQL语句中。语义规则指定如何进行有效的外部引用。因此,语义检查可以验证对数据库对象和主机变量的引用是否有效,以及主机变量数据类型是否正确。
当我把这个发给我的教授时,她只是说:“错误的数据类型的使用是语法错误。引用被定义了,但是数据类型不匹配。”
这对我来说不是什么解释,但在问了她两次之后,我不想再问她同样的问题了。如果你知道答案,请解释。
发布于 2020-06-24 11:37:03
我并不完全同意你们中的任何一个--尽管我不认为区别很重要。
我猜您的教授正在将错误分成几个类别,例如:
而“语义错误”不在列表中。在此上下文中使用“语法错误”可能实际上意味着“编译阶段的错误”,而不是“执行阶段的错误”。
“语义”指的是意义,所以我认为on s.student_id = h.hospital_id是一个语义错误,因为虽然这两个I是整数(在本例中为;),但它们并不适合作为join条件。
我不确定这个错误是不是意义上的错误。这是一个类型不兼容错误。为什么不直接将此错误称为外键定义错误?还是编译时错误?
https://stackoverflow.com/questions/62550364
复制相似问题