在 SQL 中的两个表之间设计 follower/following 架构?

designing a follower/following schema between two tables in SQL?

假设我们有两个表:

我想设计一个系统:

这是我目前所做的:

注意:两个表是不同的,但为了简单起见,我没有写下所有的属性

虽然这在用户中效果很好,我可以 return 每个用户的关注者有一些简单的查询,但我不知道如何在用户和品牌之间建立关系,以便他们可以关注每个用户其他.

感谢任何帮助!

有几种方法可以做到这一点。

看来“用户”和“品牌”很像。它们共享许多属性 - 实际上,如果将“品牌名称”和“用户名”替换为“名称”,它们将是相同的。

这可能会引导您进行一系列不同的设计。

我认为“实际上,有很多差异,我只是将它们排除在外以使问题简单化”,您可能会说有一个名为 User 的超类和两个名为 User 的子类BrandPersonmodel inheritance in relational databases有几种方法。您可能会得到如下模型:

Users
----- 
User_id (pk)
hashed_password
salt
phonenumber
address

Person
------
person_id (pk)
user_id (fk)
person_name
....


Brand
-----
brand_id (pk)
user_id (fk)
brand_name
....

Follow
-----
user_id_follower (fk)
user_id_followee (fk)

但是,您可能得出结论,“人”和“品牌”之间没有有意义的语义或行为差异 - 用户类型仅仅是该用户的一个属性.那样的话,生活会变得更轻松:

Users
----- 
User_id (pk)
hashed_password
salt
phonenumber
address
name
user_type ('brand', 'person')

Follow
-----
user_id_follower (fk)
user_id_followee (fk)

您可以基于下一个表架构:

-- all entities table
create table followers (
    id int primary key auto_increment,
    follower_type enum('user', 'brand')
);

-- users data extention
create table users (
    id int primary key,
    user_name varchar(255),
    foreign key (id) references followers(id)
);

-- brands data extension
create table brands (
    id int primary key,
    brand_name varchar(255),
    foreign key (id) references followers(id)
);

-- following rules
create table follow_rules (
    id int,
    follow_to int,
    unique key (id, follow_to)
);

Test SQL here