mysql - 友谊关系- sql

标签 mysql sql

我在网站上进行了搜索,找到了一些示例,但并非针对我的问题。

我正在用 SQL 创建一个友谊表,我想确保每一行都是唯一的。例如:如果 user xuser y 的 friend ---> user y 是 x 的 friend 。 我试图让它无法进入(在创建表格时):

user1ID  user2ID        timeStamp
11        10        01/01/2010 00:00:00
10        11        01/01/2010 00:00:00

我是这样写的:

CREATE TABLE FriendRelationship(
    User1ID INTEGER NOT NULL,
    User2ID INTEGER NOT NULL,
    **CHECK (User1ID <> User2ID), /*User x cannot be a frien with himself*/
    CHECK ((User1ID <> all User2ID) AND (User2ID <> all( User1ID))),     
    /*if user x friend with user y ->  user y is friend with user x */**
    FtimeStamp DATETIME NOT NULL,
    FOREIGN KEY (User1ID) REFERENCES UserDF(UserID),
    FOREIGN KEY (User2ID) REFERENCES UserDF(UserID),
    PRIMARY KEY (User1ID, User2ID));

最佳答案

我会采取不同的方法。因为哪个用户是 user1id 哪个是 user2id 并不重要,我只是决定 user1id 必须始终是较小的数字(应用程序有责任在插入两个 ID 时对其进行正确排序)。完成后,两者组合的主键将确保您没有重复的条目:

CREATE TABLE FriendRelationship (
    User1ID INTEGER NOT NULL,
    User2ID INTEGER NOT NULL,
    FtimeStamp DATETIME NOT NULL,
    CHECK (User1ID < User2ID), -- The decision described above
    FOREIGN KEY (User1ID) REFERENCES UserDF(UserID),
    FOREIGN KEY (User2ID) REFERENCES UserDF(UserID),
    PRIMARY KEY (User1ID, User2ID)
);

关于mysql - 友谊关系- sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44561233/

相关文章:

sql - 计算 Oracle 中每个文档的给定搜索查询/术语的命中数

mysql - 按创建时间+超时排序,MySQL

sql - 在sqlite3中合并两个表

mysql - 如果没有结果,则将查询中的所有值初始化为 0,将 top 初始化为 NULL

mysql同步查询插入

mysql - 无法再在 DirectAdmin 中启动 MySQL

mysql - 站点定期崩溃并出现错误 "Mysql connect error [localhost]: (2002) Connection refused (400)"

javascript - 将动态创建的元素的值存储到数据库 PHP MySql

php - SQL 加入和排除查询的问题

php - 限制php代码中数据库的数据