gpt4 book ai didi

mysql - 两个可能表的外键

转载 作者:行者123 更新时间:2023-11-29 11:05:51 25 4
gpt4 key购买 nike

我有两个表:学生用户
Student 表的主键为 INT(9)
User 表的主键为 MEDIUMINT

现在请看一下这张图片

Social_Network
(来源:imgh.us)

现在的问题是:在 messages 表中,我有 messageFrommessageTo 列,我不知道发件人的天气或者接收者是学生用户

由于主键类型不同,我无法引用这两个表,但是,我试图尽可能避免重大更改。
reportedPosts 表、comment 表中到处都有同样的问题。无处不在。

如何解决此问题或解决此问题的可能解决方案?

请随时反馈数据库结构,我想了解并从您的建议中学习。

提前致谢。

最佳答案

用户和学生(实体,而不是表)都是人员的示例。有些用户属性不属于学生,有些学生属性不属于用户。此外,有些操作是用户可以执行而学生不能执行的,反之亦然。然而,两者都有共同的属性(姓名、地址、电话号码等)以及两者可能采取的操作(发送/接收消息、发表评论等)。这强烈意味着需要一个单独的表来包含公共(public)属性并允许公共(public)操作。

create table People(
ID MediumInt auto_generating primary key,
PType char( 1 ) not null check( PType in( 'U', 'S' )) -- User or Student
Name varchar( 64 ) not null,
Address varchar( 128 ),
..., -- other common attributes
constraint UQ_PeopleIDType unique( ID, PType ) -- create anchor for FKs
);

create table Users(
UserID MediumInt not null primary key,
UType char( 1 ) check( UType = 'U' ),
..., -- attributes for Users
constraint FK_Users_People foreign key( UserID, UType )
references People( ID, PType )
);

create table Students(
StudentID MediumInt not null primary key,
SType char( 1 ) check( SType = 'S' ),
..., -- attributes for Students
constraint FK_Students_People foreign key( StudentID, SType )
references People( ID, PType )
);

请注意,如果创建的 Person 类型为“S”(学生),则该 Person 的 ID 值只能插入到 Student 表中。

现在,所有必须引用用户的表都可以 FK 到用户表,而那些必须引用学生的表可以 FK 到学生表。当表可以引用其中任何一个时,它们可能会 FK 到 People 表。

关于mysql - 两个可能表的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411884/

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