Mysql 如何创建具有多个值的实体?

Mysql 如何创建具有多个值的实体?,mysql,Mysql,我想在MySql中实现以下功能,但我仍然感到困惑。我想创建一个包含以下参数的表:姓名、姓氏、学期、课程、电话(一个或多个) 如何插入一个或多个电话?(例如,一名学生可能有一个或多个手机号码,或一个或多个家庭号码,或两者兼有) 到目前为止,我已经写了以下内容: CREATE TABLE student(Name varchar(255) NOT NULL,Surname varchar(255) NOT NULL, Semester INT NOT NULL,Courses varchar(255

我想在MySql中实现以下功能,但我仍然感到困惑。我想创建一个包含以下参数的表:姓名、姓氏、学期、课程、电话(一个或多个) 如何插入一个或多个电话?(例如,一名学生可能有一个或多个手机号码,或一个或多个家庭号码,或两者兼有)

到目前为止,我已经写了以下内容:

CREATE TABLE student(Name varchar(255) NOT NULL,Surname varchar(255) NOT NULL,
Semester INT NOT NULL,Courses varchar(255) ); 

--我不知道如何为学生实体写入多值(电话)

听起来你要求学生在电话号码上建立一对多关系

例如,一个学生只有一个姓氏,因此这是一对一的关系。而他们可能有多个电话号码,所以这是一对多的关系

通常,存储一对多关系的最佳方法是将电话号码存储在不同的表中,可能称为PhoneNumber。每个电话号码都应该是PhoneNumber表中的新行。要允许信息在两个表之间链接,您需要在PhoneNumber表中有一个名为student_id(或类似名称)的字段,用于存储该电话号码所属的学生的id


要在从数据库检索此信息时将多个电话号码加入到单个学生,您需要在SQL查询中的学生表和电话号码表之间使用join语句。

为电话添加不同的行,如家庭电话和个人电话,如下所示

CREATE TABLE `students` (
  `Name` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
  `Surname` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
  `Semester` int(2) NOT NULL,
  `Courses` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
  `Personal Phone` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `Home Phone` varchar(20) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

您应该阅读有关一对多关系的内容。因此,创建两个表并将其联接是一个好的解决方案吗?…在联接它们之前,我是否还需要找到它们的主键和外键?您需要为您的学生表设置主键。我建议使用名为student_id的字段。然后,您需要在PhoneNumber表中输入外键,也可以称为student_id,它将引用与该电话号码相关的学生id。要实际加入表,您不需要先找到键,然后执行新的查询来加入它们。所有这些都可以使用join语句在一个查询中完成。如果你以前没有遇到过加入,那么快速的谷歌会为你提供大量的例子。如果我这样做,那将是一个错误(我数据库中的一个设计错误),因为我认为一个学生可能有两个个人电话,两个家庭电话,而不是添加个人电话1、个人电话2、家庭电话1和家庭电话2。。。如果没有,就像下面所说的,用手机制作另一张桌子,你可以添加你想要的任意数量的手机。为此,您需要在“Name”之前输入一个ID,在Phones表中输入另一个ID,并在studedents表中进行引用,只需简单(选择s.Name、p.persphone1、p.persphone2……等等,其中s.ID=p.ID)