根据我的阅读,我知道一个用户可以拥有多个项目,但我不太明白同一个项目是否可以由不同的用户拥有。
如果一个item的同一个实例可以被不同的用户拥有,那么就需要多对多的关系,这会产生下表:user、item、intermediate关系,就这个例子来说,我’将调用UsersToItems。 UsersToItems 将包含它自己的主键和两个指向用户和项目的外键。在这种情况下,如果您只需要用户和项目之间的单一所有权实例,那么您可以通过使用外键上的唯一子句来避免重复的所有权 t-uples,如下所示:
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)
);
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 子句应用于“类型”列。
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容