一个项目是否可以由不同的用户拥有?(图)

根据我的阅读,我知道一个用户可以拥有多个项目,但我不太明白同一个项目是否可以由不同的用户拥有。

如果一个item的同一个实例可以被不同的用户拥有,那么就需要多对多的关系,这会产生下表:user、item、intermediate关系,就这个例子来说,我’将调用UsersToItems。 UsersToItems 将包含它自己的主键和两个指向用户和项目的外键。在这种情况下,如果您只需要用户和项目之间的单一所有权实例,那么您可以通过使用外键上的唯一子句来避免重复的所有权 t-uples,如下所示:

CREATE TABLE Users (
    id int NOT NULL PRIMARY KEY,
    name VARCHAR(255)
);

图片[1]-一个项目是否可以由不同的用户拥有?(图)-唐朝资源网

CREATE TABLE Items ( id int NOT NULL PRIMARY KEY, type VARCHAR(50) NOT NULL, name VARCHAR(255) );

图片[2]-一个项目是否可以由不同的用户拥有?(图)-唐朝资源网

CREATE TABLE UsersToItems( id int NOT NULL PRIMARY KEY, idExtUser int NOT NULL, idExtItem int NOT NULL, FOREIGN KEY (idExtUser) REFERENCES Users(id), FOREIGN KEY (idExtItem) REFERENCES Items(id), UNIQUE(idExtUser, idExtItem) );

如果一个项目只能由一个用户拥有,那么您需要一个一对多的关系,其中项目表将有自己的主键和用户表的外键。因此,如果您想在这种情况下也实现唯一性,则需要使 Item Type 和 User’s Foreign Key 对唯一。

CREATE TABLE Users (
    id int NOT NULL PRIMARY KEY,

    name VARCHAR(255)
);
CREATE TABLE Items (
    id int NOT NULL PRIMARY KEY,
    type VARCHAR(50) NOT NULL,

    name VARCHAR(255),
    idExtUser int NOT NULL, 
    FOREIGN KEY (idExtUser) REFERENCES Users(id),
    UNIQUE(type, idExtUser)
);

相比之下,如果您只需要一个 Items 表,它只允许不同类型的项目而不管它们之间的关系,那么只需将 unique 子句应用于“类型”列。

© 版权声明
THE END
喜欢就支持一下吧
点赞223 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片