gpt4 book ai didi

MySQL - 使用复合模式设置外键(将多个表映射到一个映射)

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:19 26 4
gpt4 key购买 nike

我正在设置一个应用程序数据库,但我很难设置外键。基本设计涉及三个表:users、clients 和 contact_map。用户有客户。用户和客户都有多个电话和电子邮件帐户。联系人 map 包含那些。它有 UserID、UserType、Key、Value。

UserID=来自客户端或用户表的 ID。UserType=enum('用户', '客户端')键/值= 电话或电子邮件地址键/值对。

我正在尝试做的事情是否可行,如果可行,您是怎么做到的?

这是我尝试过的,但没有用。

CREATE TABLE CONTACT_MAP
...
CONSTRAINT 'ContactMap_Users'
FOREIGN KEY ('UserID', 'UserType' )
REFERENCES USERS ('ID')
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT 'CONTACT_MAP_CLIENTS'
FOREIGN KEY ('UserID', 'UserType )
REFERENCES CLIENTS ('ID')
ON DELETE NO ACTION
ON UPDATE NO ACTION)

最佳答案

写下 FOREIGN KEY 约束时,子表中的字段数需要与您尝试从父表中引用的字段数相匹配。所以,你可以写...

FOREIGN KEY (UserID) REFERENCES USERS (ID)

……或者……

FOREIGN KEY (UserID, UserType) REFERENCES USERS (ID, UserType)

...但不是...

FOREIGN KEY (UserID, UserType) REFERENCES USERS (ID)

您不能真正使用 UserType 来“选择”正确的 FOREIGN KEY。避免这种需要的一种方法是模拟继承并只有一个外键:

ER Model

此实体关系术语是“类别”(参见 ERwin Methods Guide,部分:“子类型关系”)。类别符号是:

Category

关于MySQL - 使用复合模式设置外键(将多个表映射到一个映射),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8373369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com