我的MSSQL数据库设计出现问题。
我有两张看起来像这样的表:
CREATE TABLE tenants
(
tenantId INT PRIMARY KEY,
tenantName VARCHAR
)
CREATE TABLE users
(
userId INT PRIMARY KEY,
userName VARCHAR,
tenantId INT,
FOREIGN KEY (tenantId) REFERENCES tentants(tenantId)
)
我想从唯一ID切换到GUID并更改表格。 我已经读过,出于性能原因,不建议将GUID作为主键。所以我保留了ID:
CREATE TABLE tenants
(
tenantId INT PRIMARY KEY,
tenantGuid UNIQUEIDENTIFIER,
tenantName VARCHAR
)
CREATE TABLE users
(
userId INT PRIMARY KEY,
userGuid UNIQUEIDENTIFIER,
userName VARCHAR,
tenantGuid UNIQUEIDENTIFIER,
FOREIGN KEY (tenantGuid) REFERENCES tentants(tenantGuid)
)
现在实体框架正在疯狂地解除所有关系,因为guid不是主键的一部分。
在旧帖子上,我已经读过,这将不受支持。它仍然不受支持吗?
我如何支持解决这个问题?
非常感谢!
也很抱歉格式不正确,编辑不尊重我的换行符:/
soomon
答案 0 :(得分:1)
我想从唯一ID切换到GUID并更改表格。
您不需要切换到GUID以确保唯一性。只要将ID设置为主键,您的ID将保证是唯一的(无论它们是哪种类型,比如整数)。
我已经读过,出于性能原因,不建议将GUID作为主键。所以我保留了ID
tenantGuid uniqueidentifier foreign key to tenants.tenantGuid
假设您在使用GUID作为密钥时谈论'联接'的性能,那么将ID作为主键保持不会有所不同,因为无论如何都将在GUID上进行查询。
现在实体框架正在疯狂地解除所有关系,因为guid不是主键的一部分。
我如何支持解决这个问题?
我相信你最好不要解决这个问题,而是选择回到之前使用整数ID的数据库设计。或者最终使用GUID作为主键(在过程中删除整数ID)。
答案 1 :(得分:0)
如果您仍然想要我们的唯一标识符,您需要注意以下两件事
将tenants.tenantGuid设置为UNIQUE KEY,并将users.tenantGuid设置为相同的数据类型
修改表格如下
CREATE TABLE tenants (
tenantId INT PRIMARY KEY,
tenantGuid UNIQUEIDENTIFIER UNIQUE,
tenantName VARCHAR
)
CREATE TABLE users (
userId INT PRIMARY KEY,
userGuid UNIQUEIDENTIFIER,
userName VARCHAR,
tenantGuid UNIQUEIDENTIFIER,
FOREIGN KEY (tenantGuid) REFERENCES tenants(tenantGuid)
)
希望这适合你