Please check if my tables specs agree with business rules. Also, please explain the differences between CONSTRAINT
, FOREIGN KEY
and CONSTRAINT FOREIGN KEY
.
I have four MySQL tables (USER
, NAME
, PATIENT
and DOCTOR
) with the following rules:
- A patient must have a name
- A patient can be a user
- A doctor must have a name
- A doctor must be a user
- A patient can be a doctor and vice versa...
- By 3 & 5, if a patient is a doctor that patient must be a user
CREATE TABLE USER (
userName VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE,
userId MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
userEmail VARCHAR(100) NOT NULL,
userPassword VARCHAR(64) NOT NULL,
PRIMARY KEY(userId))
CREATE TABLE PATIENT (
patientId MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
userId MEDIUMINT UNSIGNED,
patientBirthday CHAR(8), # yyyymmdd
patientBirthplace VARCHAR(50),
patientGender TINYINT(1) UNSIGNED, # 0:male 1:female
patientBloodType TINYINT(1) UNSIGNED,
PRIMARY KEY(patientId),
CONSTRAINT FOREIGN KEY(userId) REFERENCES USER(userId)
ON DELETE CASCADE ON UPDATE CASCADE)
CREATE TABLE DOCTOR (
doctorId MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
userId MEDIUMINT NOT NULL UNSIGNED,
nameId MEDIUMINT NOT NULL UNSIGNED,
PRIMARY KEY(patientId),
CONSTRAINT FOREIGN KEY(userId) REFERENCES USER(userId)
CONSTRAINT FOREIGN KEY(nameId) REFERENCES USER(nameId)
ON DELETE CASCADE ON UPDATE CASCADE)
CREATE TABLE NAME (
nameId MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
userId MEDIUMINT UNSIGNED,
lastName VARCHAR(100) NOT NULL,
firstName VARCHAR(100) NOT NULL,
PRIMARY KEY(nameId),
CONSTRAINT FOREIGN KEY(userId) REFERENCES USER(userId)
ON DELETE CASCADE ON UPDATE CASCADE)