Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2中hasMany关系的MySQL列定义_Php_Mysql_Yii2 - Fatal编程技术网

Php Yii2中hasMany关系的MySQL列定义

Php Yii2中hasMany关系的MySQL列定义,php,mysql,yii2,Php,Mysql,Yii2,我有一个定义了字母数字employee_id(目前为9个字符,但最多可以增加15个字符)的employees表作为键: CREATE TABLE employee ( emp_id VARCHAR(15) NOT NULL PRIMARY KEY, emp_name VARCHAR(255) NOT NULL, ... ); 现在,我必须创建一个组实体,其中每个员工都可以是多个组的一部分: CREATE TABLE group ( group_id VARCHA

我有一个定义了字母数字employee_id(目前为9个字符,但最多可以增加15个字符)的employees表作为键:

CREATE TABLE employee (
    emp_id VARCHAR(15) NOT NULL PRIMARY KEY,
    emp_name VARCHAR(255) NOT NULL,
    ...
);
现在,我必须创建一个组实体,其中每个员工都可以是多个组的一部分:

CREATE TABLE group (
    group_id VARCHAR(15) NOT NULL PRIMARY KEY,
    group_name VARCHAR(255) NOT NULL,
    employees ????, <--- how should this be defined?
    FOREIGN KEY fk_emp(employees) REFERENCES employee(emp_id)
);
创建表组(
组id VARCHAR(15)非空主键,
组名称VARCHAR(255)不为空,
员工??,像这样:

您可以通过第三个表将组和员工表链接在一起。这允许您将员工链接到多个组中,并且组也可以链接到多个员工。

如下所示:


您可以通过第三个表将group和employee表链接在一起。这样您就可以将员工链接到多个组中,而group也可以链接到多个员工。

您所说的集合是什么意思?您能否澄清一下,您想了解的是Yii2的哪些方面?:)@mrateb我试图将其用作列定义,但不确定Yii2是否支持集合类型。编辑:再想一想,这不符合目的。相反,需要一种在列中存储一组外键的方法。您所说的集合是什么意思?你能澄清一下你想了解的关于Yii2的是什么吗?:)@mrateb我试图将其用作列定义,但不确定Yii2是否支持集合类型。编辑:再想一想,这不符合目的。相反,需要一种在列中存储一组外键的方法。实际上,我试图避免创建第三个表来创建链接。因为它将只保存键,有没有一种方法可以将内容直接作为一列包含在其中一个表中,比如一组外键?如果每个组只有一名员工(!),当然可以。否则,您可以创建一个varchar,其中包含组中的员工ID列表,以“,”分隔。但是,您的代码变得凌乱,无法使用SQL处理组内的员工。。。了解数据库体系结构的正常形式。你想避免这种情况的愿望表明了你的“新手”态度,在我的公司,你的整个申请都会被拒绝并重写。无意冒犯,只是指出你想法中的问题。混乱的代码:你需要知道你的员工属于哪个群体。您必须遍历所有组,查看其员工id是否在成员列表中。对于第三个表,您需要执行1个sql,瞧!事实上,这正是我试图避免额外规范化的原因:我们永远不需要查询员工属于哪个组。行动将在小组中执行,并向下渗透到员工。无论什么地方,只要需要双向关系,这已经成为第三个问题。这是一种特殊情况,只要有一个序列化集就足够了。如果可能的话,它将使我们不必查询三个表(group->employees\u in\u group->employee),而不用查询2个表(group->employees)。您的呼叫,但请记住,需求会发生变化,客户需要更多……实际上,我正试图避免创建第三个表只是为了创建链接。因为它将只保存键,有没有一种方法可以将内容直接作为一列包含在其中一个表中,比如一组外键?如果每个组只有一名员工(!),当然可以。否则,您可以创建一个varchar,其中包含组中的员工ID列表,以“,”分隔。但是,您的代码变得凌乱,无法使用SQL处理组内的员工。。。了解数据库体系结构的正常形式。你想避免这种情况的愿望表明了你的“新手”态度,在我的公司,你的整个申请都会被拒绝并重写。无意冒犯,只是指出你想法中的问题。混乱的代码:你需要知道你的员工属于哪个群体。您必须遍历所有组,查看其员工id是否在成员列表中。对于第三个表,您需要执行1个sql,瞧!事实上,这正是我试图避免额外规范化的原因:我们永远不需要查询员工属于哪个组。行动将在小组中执行,并向下渗透到员工。无论什么地方,只要需要双向关系,这已经成为第三个问题。这是一种特殊情况,只要有一个序列化集就足够了。如果可能的话,它将使我们不用查询三个表(组->组中的员工->员工),而不用查询两个表(组->员工)。您的呼叫,但请记住,需求发生变化,客户需要更多。。。