Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在单方实体上实施一对多关系中的完全参与SQL_Sql_Database_Db2 - Fatal编程技术网

在单方实体上实施一对多关系中的完全参与SQL

在单方实体上实施一对多关系中的完全参与SQL,sql,database,db2,Sql,Database,Db2,我正在将以下ER图转换为SQL代码: 为了对此进行建模,我为每个实体以及关系创建了一个表。我的问题是对一对多关系建模,以及对医疗测试实体强制执行完全参与约束 我从Person实体开始: 我将ID分配为NOTNULL,因为它是主键 其次是医疗检测实体: 现在是我正在努力解决的部分,Does-Test关系: -- Does Test Relationship CREATE TABLE DoesTest ( uniquePersonID CHAR(10) NOT NULL, testID CHAR(

我正在将以下ER图转换为SQL代码:

为了对此进行建模,我为每个实体以及关系创建了一个表。我的问题是对一对多关系建模,以及对医疗测试实体强制执行完全参与约束

我从Person实体开始:

我将ID分配为NOTNULL,因为它是主键

其次是医疗检测实体:

现在是我正在努力解决的部分,Does-Test关系:

-- Does Test Relationship
CREATE TABLE DoesTest (
uniquePersonID CHAR(10) NOT NULL,
testID CHAR(10),
testDate DATE,
result VARCHAR(100),
PRIMARY KEY (testID),
FOREIGN KEY (uniquePersonID) REFERENCES Person,
FOREIGN KEY (testID) REFERENCES MedicalTest);
据我所知,例如,如果我想让医疗测试完全参与,我会让患者主键不为空。为了建模一对多,我将主键分配给单侧实体。但是,当我运行该文件时,它告诉我关系表中的testID不能允许空值。然而,根据我所学到的,如果我把它赋值为非空,那将迫使它完全参与,这是我试图避免的

错误:

CREATE TABLE DoesTest ( testDate DATE, result VARCHAR(100), testID CHAR(10), 
uniquePersonID CHAR(10) NOT NULL, PRIMARY KEY (testID), FOREIGN KEY 
(uniquePersonID) REFERENCES Person, FOREIGN KEY (testID) REFERENCES 
MedicalTest)
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0542N  The column named "TESTID" cannot be a column of a primary key or 
unique key constraint because it can contain null values.  SQLSTATE=42831

表的主键从不接受空值,并且应该始终包含
notnull
约束

如果将主键更改为:

CREATE TABLE DoesTest (
  testDate DATE,
  result VARCHAR(100),
  testID CHAR(10) NOT NULL, -- added NOT NULL here.
  uniquePersonID CHAR(10) NOT NULL,
  PRIMARY KEY (testID),
  FOREIGN KEY (uniquePersonID) REFERENCES Person,
  FOREIGN KEY (testID) REFERENCES MedicalTest
);

我不完全明白您所说的“完全参与”是什么意思,但是
notnull
约束仅对现有行进行验证。并非所有患者都必须在
DoesTest
中有相应的行。这些将模拟尚未接受测试的患者,这是完全正常的。

什么是数据库引擎?DB2?Oracle、PostgreSQL、MySQL等。引擎是DB2。使用
DECIMAL
DECFLOAT
计算货币金额,而不是使用这里的二进制浮点值
testFee REAL
您有很多可为空的列。例如,
MedicalTest
没有
TestName
确实很有用。Aso应该
TestName
s不是唯一的吗?另外,如果你想保持你的混合病例命名标准,你需要双重引用你的所有标识。通过完全参与,我的意思是医疗检测必须与患者有关系,这由一条较粗的黑线表示,箭头确定它是多对一。通过强制testID也不为NULL,我被告知这会使患者实体也完全参与,这是我不希望发生的事情。不,在表
DoesTest
中添加
NOT NULL
不会强制患者完全参与
uniquePersonId CHAR(10)NOT NULL
将强制执行属于患者的测试,但不会强制患者进行测试。我想这就是你想要的。如果分配NOTNULL不会强制要求全部参与,那会是什么?因为这是医学测试的要求。另外,我是否正确表示了一对多关系?
CREATE TABLE DoesTest ( testDate DATE, result VARCHAR(100), testID CHAR(10), 
uniquePersonID CHAR(10) NOT NULL, PRIMARY KEY (testID), FOREIGN KEY 
(uniquePersonID) REFERENCES Person, FOREIGN KEY (testID) REFERENCES 
MedicalTest)
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0542N  The column named "TESTID" cannot be a column of a primary key or 
unique key constraint because it can contain null values.  SQLSTATE=42831
CREATE TABLE DoesTest (
  testDate DATE,
  result VARCHAR(100),
  testID CHAR(10) NOT NULL, -- added NOT NULL here.
  uniquePersonID CHAR(10) NOT NULL,
  PRIMARY KEY (testID),
  FOREIGN KEY (uniquePersonID) REFERENCES Person,
  FOREIGN KEY (testID) REFERENCES MedicalTest
);