两个表是多对多的关系,一定需要关联表吗?
有两张表规则表和组表:tb_rules
,tb_group
这是
auth
权限中的两张表,明显他们是多对多的关系,一个规则可以属于多个组,一个组可以拥有多个规则;
按道理说应该有一张关联表tb_group_rules(group_id,rule_id)
但是thinkPHP
的auth
类里面不用关联表,是这样的tb_group
里面有一个rules
字段,保存'1,2,3,4,5,6,7,8,9'
这样的规则id
;
我猜想他不用关联表可能有这几个考虑:
1:一般每个组的规则并不多,用一个字段比较管理方便,不必要建一个关联表造成资源的浪费
2:一般都是取得组的规则id
,授权时直接更改组的规则字段
但是我觉得这样时候总不好:
1:什么叫一般组的规则不多,什么叫一般,这个谁说的准呢,反正我就是不放心
2:将规则用,分割好吗,如果要是想取消某一个规则,这样极为不方便(程序只能查出规则字段用,分割再取出,在拼接,在保存),给维护带来麻烦
3:通过组来更改规则是方便,但如果我想根据规则看它属于那些组时,或者根据规则为它授权某些组时就比较麻烦了
如果使用关联表,上面都不是问题,也利于程序的维护
上面就是我的理解和利弊的分析,如有不对请大神指正
我探讨的问题,如题,到底什么时候使用关联表,以及利弊的权衡,比如此案列中的情况。
回复内容:
有两张表规则表和组表:tb_rules
,tb_group
这是
auth
权限中的两张表,明显他们是多对多的关系,一个规则可以属于多个组,一个组可以拥有多个规则;
按道理说应该有一张关联表tb_group_rules(group_id,rule_id)
但是thinkPHP
的auth
类里面不用关联表,是这样的tb_group
里面有一个rules
字段,保存'1,2,3,4,5,6,7,8,9'
这样的规则id
;
我猜想他不用关联表可能有这几个考虑:
1:一般每个组的规则并不多,用一个字段比较管理方便,不必要建一个关联表造成资源的浪费
2:一般都是取得组的规则id
,授权时直接更改组的规则字段
但是我觉得这样时候总不好:
1:什么叫一般组的规则不多,什么叫一般,这个谁说的准呢,反正我就是不放心
2:将规则用,分割好吗,如果要是想取消某一个规则,这样极为不方便(程序只能查出规则字段用,分割再取出,在拼接,在保存),给维护带来麻烦
3:通过组来更改规则是方便,但如果我想根据规则看它属于那些组时,或者根据规则为它授权某些组时就比较麻烦了
如果使用关联表,上面都不是问题,也利于程序的维护
上面就是我的理解和利弊的分析,如有不对请大神指正
我探讨的问题,如题,到底什么时候使用关联表,以及利弊的权衡,比如此案列中的情况。
对应你觉得这样时候总不好的三点说明,我进行回复个人观点,(因为您的问题,公说公有理婆说婆有理)。
1、一般,你自己猜想了一般情况,而又是你自己否定这个一般情况,那么这是你自己的问题了。
2、分割,如果rules字段现在存储的是‘1,2,3,4,5,6,7,8,9’,那么在管理界面进行删除2号角色的时候,不是对现有存储的rules字段值进行分割,剔除2,在组合。而是在管理界面删除后点击保存,表单重新提交组所拥有的角色信息进行组合拼接,然后update保存rules字段信息。而并不是你所描述的情况:“分割再取出,在拼接,在保存”,这的确给维护带来麻烦,但是实际做法不该是描述的这样子。
3、“但如果我想根据规则看它属于那些组时”,这应该是你业务需要,thinkPHP在设计的时候并未直接考虑这点。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

L'un des changements majeurs introduits dans MySQL 8.4 (la dernière version LTS en 2024) est que le plugin « MySQL Native Password » n'est plus activé par défaut. De plus, MySQL 9.0 supprime complètement ce plugin. Ce changement affecte PHP et d'autres applications

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

La page est vide après que PHP se connecte à MySQL, et la raison pour laquelle la fonction Die () échoue. Lorsque vous apprenez la connexion entre PHP et la base de données MySQL, vous rencontrez souvent des choses déroutantes ...

CMS signifie Système de gestion de contenu. Il s'agit d'une application logicielle ou d'une plate-forme qui permet aux utilisateurs de créer, gérer et modifier du contenu numérique sans nécessiter de connaissances techniques avancées. Le CMS permet aux utilisateurs de créer et d'organiser facilement du contenu tel que du texte, des images, des vidéos et des documents, et de le publier sur des sites Web ou d'autres plateformes numériques.

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.
