我的MSSQL数据库设计有问题。
我有2个桌子,看起来像这样:
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)
)
我想从IDS中仅切换到GUIDS,以获取独特性并更改表。我已经读到,出于性能原因,不建议将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
我想从ID仅切换到GUIDS以获得唯一性并更改表。
您实际上不需要切换到GUIDS来确保唯一性。只要将它们设置为主要键,您的ID就可以保证是唯一的(例如它们是哪种类型)。
我已经读到,出于性能原因,不建议将GUID作为主要键。所以我保留了ID
tenantGuid uniqueidentifier foreign key to tenants.tenantGuid
假设您在使用GUID作为密钥时谈论的是"加入"的性能,那么将ID作为主要密钥将不会有所作为,因为无论如何都会在GUID上进行查询。
现在,实体框架正在疯狂地驳回所有关系,因为GUID不是主要关键的一部分。
我如何支持解决这个问题?
我相信您最好不要解决这个问题,而是选择返回使用整数ID的以前的数据库设计。或最终将GUID用作主要密钥(在此过程中删除整数ID)。
如果您仍然想给我们唯一的标识符,则需要注意以下两个件事
将租户设置为唯一键,还将用户设置为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)
)
希望这对您有用