Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
Sql 什么';RDBMS中基于表的关系和基于列的关系的区别是什么?_Sql_Mysql_Sql Server_Database_Oracle - Fatal编程技术网

Sql 什么';RDBMS中基于表的关系和基于列的关系的区别是什么?

Sql 什么';RDBMS中基于表的关系和基于列的关系的区别是什么?,sql,mysql,sql-server,database,oracle,Sql,Mysql,Sql Server,Database,Oracle,我在项目中经常使用基于列的关系,例如: CREATE TABLE `user` ( id INT AUTO_INCREMENT PRIMARY KEY, usergroup INT ); CREATE TABLE `usergroup` ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); 然而,在工作中,似乎有些人使用以下基于表的关系: CREATE TABLE `user` ( id INT AUTO_INCREMENT PRI

我在项目中经常使用基于列的关系,例如:

CREATE TABLE `user` (
id INT AUTO_INCREMENT PRIMARY KEY,
usergroup INT
);

CREATE TABLE `usergroup` (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
然而,在工作中,似乎有些人使用以下基于表的关系:

CREATE TABLE `user` (
id INT AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE `usergrouprelation` (
userid INT,
usergroupdid INT
);

CREATE TABLE `usergroup` (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);

我想知道这两种方法的优缺点是什么?官方术语是什么?

关系不同

在第一个示例中,一对多关系。一个组可以有多个用户。(一个用户只能在一个组中)

在第二个示例中,是一种多对多关系。许多组可以有许多用户。(一个用户可以在多个组中,并且组可以有多个用户)


这就是两者之间的区别,通常使用中间表来分解多对多关系。

这些关系是不同的

在第一个示例中,一对多关系。一个组可以有多个用户。(一个用户只能在一个组中)

在第二个示例中,是一种多对多关系。许多组可以有许多用户。(一个用户可以在多个组中,并且组可以有多个用户)


这就是两者之间的区别,通常使用中间表来打破多对多关系。

这没有一般的优点或缺点。我将您的“基于列的关系”称为1:n关系,将您的“基于表的关系”称为n:m关系

1:n表示每个用户可以与零个或一个用户组关联,每个用户组可以与多个用户关联


n:m意味着,每个用户都可以与零到多个用户组相关联,反之亦然。

关于这一点没有一般的优点或缺点。我将您的“基于列的关系”称为1:n关系,将您的“基于表的关系”称为n:m关系

1:n表示每个用户可以与零个或一个用户组关联,每个用户组可以与多个用户关联


n:m意味着,每个用户都可以与零对多用户组相关,反之亦然。

如果你有多对多关系,你必须走第二条路。 但是如果你有一对多或多对一的关系,你可以选择两个变体中的任何一个(但是第二个更容易扩展)


查看更多信息:

如果你有多对多关系,你必须走第二条路。 但是如果你有一对多或多对一的关系,你可以选择两个变体中的任何一个(但是第二个更容易扩展)


查看更多信息:

您要查找的术语是“多对多关系”的“透视表”。顺便说一句,这些不是“关系”。关系是我们通常称之为表的东西,这意味着数据块与主键/候选键()相关。您要寻找的术语是“多对多关系”的“透视表”。顺便说一句,这些不是“关系”。关系是我们通常称之为表的东西,这意味着数据片段与主键/候选键()相关。