gpt4 book ai didi

mysql - 数据库架构,1 个表或 2 个表

转载 作者:搜寻专家 更新时间:2023-10-30 22:19:51 25 4
gpt4 key购买 nike

我的应用程序将允许用户拥有联系人列表。这是我当前的架构:

CREATE TABLE IF NOT EXISTS `contact` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`person_id` int(11) NOT NULL,
`create_time` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`person_id`)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `contact_request` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`person_id` int(11) NOT NULL,
`create_time` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`person_id`)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email_address` varchar(50) NOT NULL,
`username` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email_address` (`email_address`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB;

当用户尝试将另一个用户添加为联系人时,将在 contact_request 表中创建一条记录。如果收到请求的用户拒绝请求,则删除 contact_request 记录。如果用户决定接受请求,contact_request 表中的数据将添加到 contact 表中,然后从 contact_request 表中删除。

我意识到我可以用另一种方式来做到这一点,我删除了 contact_request 表并向联系人表添加了另一个字段,例如:表示联系人是刚被请求还是已被接受的请求的状态。

CREATE TABLE IF NOT EXISTS `contact` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`person_id` int(11) NOT NULL,
`status` tinyint(1) not null,
`create_time` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`person_id`)
) ENGINE=InnoDB;

我看到的优势是我可以少一张 table 。我目前没有看到由于此更改而出现的问题。值得改变吗?这两种方法是否还有其他我可能不知道的优点。推荐哪个?

最佳答案

另一个优点可能是拥有此status(INTCHAR),记录请求(Q), 接受联系人 (C), 拒绝请求 (J), 拒绝并重新请求 (R), 列入黑名单 (B) 和可能的其他状态,这样您就可以更轻松地应用更复杂的逻辑,例如“用户在被拒绝两次后无法再次请求联系”等。

关于mysql - 数据库架构,1 个表或 2 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5293046/

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