Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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 在MySQL中指定关系_Php_Mysql_Database_Relationship - Fatal编程技术网

Php 在MySQL中指定关系

Php 在MySQL中指定关系,php,mysql,database,relationship,Php,Mysql,Database,Relationship,我试图找出在MySQL中表示这一点的最佳方法。我有两个表:客户和账户。任何客户都可以“拥有”零个、一个或多个账户。两个不同的客户端可能拥有相同的帐户。因此,一个客户机有许多账户,反之亦然 因此,我目前的计划是,clients表有一个字段accounts,其中包含一个以逗号分隔的accountid列表。这很好用 但是,如果有一个单独的表(例如,client\u accounts),包含两个字段,client\u id和account\u id,是否更有意义 这是针对一个永远不会有数百万行的数据库,

我试图找出在MySQL中表示这一点的最佳方法。我有两个表:
客户
账户
。任何
客户
都可以“拥有”零个、一个或多个
账户
。两个不同的
客户端
可能拥有相同的
帐户
。因此,一个
客户机
有许多
账户
,反之亦然

因此,我目前的计划是,
clients
表有一个字段
accounts
,其中包含一个以逗号分隔的
account
id列表。这很好用

但是,如果有一个单独的表(例如,
client\u accounts
),包含两个字段,
client\u id
account\u id
,是否更有意义


这是针对一个永远不会有数百万行的数据库,所以效率不是一个很大的因素

是的,如果要保持数据库的完整性,任何关系为n:n(多对多)或1:n的表都应该使用一个额外的表来链接这两个表

但是,有一个单独的表(例如,
client\u accounts
)和两个字段,
client\u id
account\u id

这正是你应该做的。通过这种方式,您可以更好地利用索引并获得更快的连接。您还将在数据安全上保存一些efford,一旦您需要在此表中使用两列的唯一组合,以避免重复数据:

/* ... */ ADD idx_pair UNIQUE(client_id,account_id)

关联表通常被视为比CSV“更好”。这种机制风格是我为应用程序编写权限系统的方式。用户表、角色表(每个权限)和关联表,其中包含授予的每个用户/权限的一条记录。不要在表列中使用逗号分隔的值。。。。它在尝试更新时不可避免地会产生问题,并且无法轻松搜索,因为您无法为单个值编制索引,因此搜索性能很慢。。。。使用
account\u client
交叉引用表,使用
many-to-many
关系查找数据库规范化。这是@Andrew Coder上面提到的“关联表”。是否有人详细说明如何将这两列设置为
唯一的
?这是否会阻止我将同一
帐户应用于多个
客户端