Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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
Mysql “如何模仿”;“扩展类”;使用数据库表?_Mysql_Database_Database Design_Entity Relationship - Fatal编程技术网

Mysql “如何模仿”;“扩展类”;使用数据库表?

Mysql “如何模仿”;“扩展类”;使用数据库表?,mysql,database,database-design,entity-relationship,Mysql,Database,Database Design,Entity Relationship,我将有几种不同类型的用户使用我的系统。对于所有用户,我需要存储用户名、密码、电子邮件地址等内容,但如果他们是a类用户,我还需要存储字段a、b和c的值,但如果他们是b类用户,我需要存储字段d、e、f和g的值 USER ------- id username password CAT_A -------- id a b c CAT_B -------- id d e f g 我很可能需要使用某种桥接表来将用户链接到其中一个CAT表,但是我该怎么做呢?我不能用这样的东西: EXTEND ----

我将有几种不同类型的用户使用我的系统。对于所有用户,我需要存储用户名、密码、电子邮件地址等内容,但如果他们是a类用户,我还需要存储字段a、b和c的值,但如果他们是b类用户,我需要存储字段d、e、f和g的值

USER
-------
id
username
password

CAT_A
--------
id
a
b
c

CAT_B
--------
id
d
e
f
g
我很可能需要使用某种桥接表来将用户链接到其中一个CAT表,但是我该怎么做呢?我不能用这样的东西:

EXTEND
--------
user_id
cat_id
因为我不知道猫id指的是哪张猫桌。我是否需要每个类别的字段?如果是这样的话,这看起来并没有标准化,因为会有很多空字段,特别是如果我有3个类别的话

EXTEND
--------
user_id
cat_a_id
cat_b_id
...

非常感谢您的任何意见

在SQL中映射层次结构有两种常见方法。因为SQL没有处理继承的自然方法,所以这些传统方法各有优缺点。常见的有:每个层次的表、每个类型的表和每个具体类型的表,但可能还有其他几种。下面是一个表/类型模型的示例(代码中的每种类型都直接映射到一个表):


要获取所有A类用户,请执行“从用户内部连接类别中选择用户”操作。B类用户也是如此。此型号可能适合您的需要,也可能不适合您的需要。如果没有,我建议搜索上面提到的其他类型的模型。

我知道这个线程很旧,但我自己正在寻找一个优雅的解决方案。根据我过去所做的:

您可以在用户表中添加一列,告知用户所属的“类别”。然后,在查询用户表时,可以基于该表进行类别查询


或者,您可以“左外联接”所有类别表,并根据返回的列来计算结果。在本例中,您将返回用户列以及所有a、b、c、d、e、f和g。当然,如果该表中没有该用户的条目,其中的一些列将为空。

关系数据库在这方面非常糟糕。就像他们说的,gl hf。所以你是说没有一个“好”的解决方案?至少我不知道。(如果您想让我回复您的评论,请在您的评论中加入@zneak;否则我不会得到通知)@zneak如果我有用户表,其中包含一个到桥接表的FK,并且在该桥接表中我列出了用户表的PK,在另一个字段中我有CAT表名,该怎么办?我可能无法创建一个查询,但是使用一些PHP,我可以得到我需要的结果。。。您认为如何?请参阅我的答案,如果用户登录,我查询用户表,如何知道要查询其他表中的哪一个以获取剩余数据?外键将只存在于这两个表中的一个表中。使用Join语句,它将链接到正确的表,然后您可以从那里开始。
User
---------------
user_id (PK, auto-generated?)
username
password

CategoryAUser
---------------
user_id (PK, FK to User.user_id)
a
b
c

CategoryBUser
---------------
user_id (PK, FK to User.user_id)
e
f
g
h