Я нахожусь в процессе перевода следующей диаграммы ER в код SQL:
Чтобы смоделировать это, я создал таблицу для каждого соответствующегосущность, а также таблица для отношений.Моя проблема заключается в моделировании отношения один-ко-многим, а также в применении ограничения общего участия для сущности Medical Test .
Я начинаю с сущности Person :
-- Person Entity
CREATE TABLE Person (
uniquePersonID CHAR(10) NOT NULL,
gender CHAR(1), -- "M" = Male | "F" = Female
firstName VARCHAR(30),
lastName VARCHAR(30),
dateOfBirth DATE,
PRIMARY KEY (uniquePersonID));
Я присваиваю идентификатор как NOT NULL, потому что это первичный ключ.
Затем следует Медицинский тест сущность:
CREATE TABLE MedicalTest (
testID CHAR(10) NOT NULL,
testFee REAL,
testName VARCHAR(30),
PRIMARY KEY (testID));
Теперь начинается та часть, с которой я борюсь, отношения делает тест :
-- 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 в таблице отношений не может допустить значения NULL.Однако, исходя из того, чему меня учили, если я назначу его НЕ ПУСТО (NULL), это заставит его иметь полное участие, чего я пытаюсь избежать.
Ошибка:
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