[英]is this in 3NF?
这是3NF吗?
mysql show tables;
+--------------------+
| Tables_in_hospital |
+--------------------+
| address |
| bed |
| department |
| hospital_number |
| phone_number |
| region |
| type |
+--------------------+
mysql desc hospital_number; //PRI key = Hospital_Number
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| name | varchar(64) | NO | | NULL | |
| Hospital_Number | int(11) | NO | PRI | NULL | |
+-----------------+-------------+------+-----+---------+-------+
mysql desc address; //PRI key = Address, FOR key = Hospital_number
+-----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| Address | varchar(128) | NO | PRI | NULL | |
| Latitude | double | NO | | NULL | |
| Longitude | double | NO | | NULL | |
| Postcode | varchar(32) | NO | | NULL | |
| Hospital_Number | int(11) | NO | MUL | NULL | |
+-----------------+--------------+------+-----+---------+-------+
mysql desc department; //PRI key = Hospital_number + Department,
//FOR key = Hospital_number
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| Hospital_Number | int(11) | NO | PRI | NULL | |
| Department | varchar(64) | NO | PRI | NULL | |
+-----------------+-------------+------+-----+---------+-------+
mysql desc bed; //PRI key = Hospital_number + Bed,
//FOR key = Hospital_number
+-----------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------+------+-----+---------+-------+
| Hospital_Number | int(11) | NO | PRI | NULL | |
| Bed | int(11) | NO | PRI | NULL | |
+-----------------+---------+------+-----+---------+-------+
mysql desc phone_number; //PRI key = Hospital_number + Phone_number,
//FOR key = Hospital_number
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| Hospital_Number | int(11) | NO | PRI | NULL | |
| Phone_Number | varchar(64) | NO | PRI | NULL | |
+-----------------+-------------+------+-----+---------+-------+
mysql desc region; //PRI key = Hospital_number + region,
//FOR key = Hospital_number
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| Hospital_Number | int(11) | NO | PRI | NULL | |
| Region | varchar(12) | NO | PRI | NULL | |
+-----------------+-------------+------+-----+---------+-------+
mysql desc type; //PRI key = Hospital_number + type,
//FOR key = Hospital_number
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| Hospital_Number | int(11) | NO | PRI | NULL | |
| Type | varchar(12) | NO | PRI | NULL | |
+-----------------+-------------+------+-----+---------+-------+
第一次用MySQL做数据库表,不知道是否满足3NF。 1 NF 通过将科室表与医院表分开来满足。 我认为 2 NF,3 NF 令人满意,但我不确定。 请检查我的数据库 我的表格有什么问题?
我所说的关于医院和区域(或类型)之间的多对多关系过于复杂:给定的医院不太可能与多个区域相关联(至少不在您的 model 中;医院可以有多个区域存在)。 所以我们将 go 与您更简单的一对多关系。 您的 model 中的问题仍然存在,您可能在同一地区有多家医院,如果您决定更改该地区的名称,您将需要更新多行(与type
表相同):
使用表hospital_number
(顺便说一下,我可能只是将其命名为hospital
)和region
作为示例(您可以将其概括为 table type
):
CREATE TABLE `region` (
`Region_Number` int(11) NOT NULL AUTO_INCREMENT,
`Region` varchar(12) NOT NULL,
PRIMARY KEY (`Region_Number`)
) ENGINE=InnoDB;
CREATE TABLE `hospital_number` (
`name` varchar(64) NOT NULL,
`Hospital_Number` int(11) NOT NULL AUTO_INCREMENT,
`Region_Number` int(11) NOT NULL,
PRIMARY KEY (`Hospital_Number`),
CONSTRAINT FOREIGN KEY (`Region_Number`) REFERENCES `region` (`Region_Number`) ON UPDATE CASCADE
) ENGINE=InnoDB;
请注意,在 table region
中,列Region
不是主键的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.