繁体   English   中英

这是3NF吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM