gpt4 book ai didi

mysql - 一张表中两列之间的外键关系

转载 作者:可可西里 更新时间:2023-11-01 08:06:46 25 4
gpt4 key购买 nike

我正在构建一个数据库表,表示一个“注释”,它在其中的两列中具有父子关系,如下所示:

ID           INT(10) PK NOT NULL UNSIGNED ZEROFILL AUTOINCREMENT  -- Primary key
parent_ID INT(10) UNSIGNED ZEROFILL -- References Primary key
username VARCHAR(30) NOT NULL
information VARCHAR(256) NOT NULL
comment VARCHAR(256) NOT NULL

其中 usernameuser 表的外键,是写笔记的人的用户名,information 是信息注释和 comment 中包含的是 username 添加的内容。 comment 总会有一些东西在里面,不一定和之前的用户一样。

这个概念是有人可以“复制”一张纸条并发表自己的评论,然后说“我从xxx那里得到了这张纸条”,因此形成了亲子关系。也许有点像在 Facebook 上分享。

如何正确形成 parent_ID 列?我应该使用识别关系吗?哪些方面是强制性的?我认为这必须是一对多关系,因为五个人可以复制同一条笔记。

我希望复制的次数多于创建新笔记的次数,因此记录中的 NULL 数量相对较少,但要完全消除空值,我应该应用 NOT NULL 约束并简单地使默认父级 0ID 0 处有一个基本无意义的记录,并在软件中注意到这一点?

这是正确的方法吗?我是否应该使用一个双表系统:

ID          INT(10)      PK
information VARCHAR(256)
orig_user VARHCAR(30) FK -- Potentially

ID          INT(10)      PK FK
username VARCHAR(30) PK FK
comment VARCHAR(256)

哪个根据定义消除了任何可能的 NULL

谢谢

最佳答案

Should I use an identifying relationship

不,只有 ID 应该在 PK 中,因为它单独 是唯一的。此外,根(无父级)注释将有一个 NULL parent_ID 并且 NULL 不能出现在 PK 中。

I figure this has to be a 1-to-Many relationship since five people can copy the same note.

正确。它也是一棵树,因为可以有多个级别的复制。

... should I apply a NOT NULL constraint and simply make the default parent 0 with an essentially meaningless record at ID 0 and take note of this in the software?

不需要,FK 仍然会在 0 上强制执行,您需要一个“虚拟”行来满足它,正如您已经指出的那样。 FK 忽略 NULL,因此只需在根注释的 parent_ID 中放置一个 NULL。

Should I employ a two-table system...

这不是同一件事的模型。它只允许您连接到原始用户,而不是原始笔记。

如果单个笔记可以有多个父节点,不同的双表设计是可行的,但这里似乎不是这种情况。

Which eliminates any possible NULL's by definiton?

您似乎很想消除 NULL。有什么理由吗?


总而言之,您应该只在一张表中存储笔记,如下所示:

CREATE TABLE note (
ID INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
parent_ID INT(10) UNSIGNED,
username VARCHAR(30) NOT NULL,
information VARCHAR(256) NOT NULL,
comment VARCHAR(256) NOT NULL,
FOREIGN KEY (parent_ID) REFERENCES note (ID),
FOREIGN KEY (username) REFERENCES `user` (username)
);

关于mysql - 一张表中两列之间的外键关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12356458/

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