I have a table named, ‘[UserTypes]’ where Primary id is [uniqueidentifier]
. and I have a reference in another table called ‘[Users]’. Users
table has UserTypeId
as foreignKey.
CREATE TABLE [UserTypes] ( [Id] [uniqueidentifier] DEFAULT NEWID() PRIMARY KEY, [UserName] [varchar](100) NOT NULL, [UserCD] [varchar](40) NOT NULL GO INSERT INTO [dbo].[UserTypes] ([UserName], [UserCD]) VALUES ('Administrator','ADMI'), ('NonPrimary','NONP'), GO -- ID got generated in [UserTypes] is '80D1EEE7-0BCC-48A7-A741-29A1D8B6E580' for 'ADMI' CREATE TABLE [Users] ( [Id] [uniqueidentifier] DEFAULT NEWID() PRIMARY KEY, [UserTypeId] [uniqueidentifier] NOT NULL, [UserName] [varchar](100) NOT NULL, CONSTRAINT Users_UserTypeId_UserType_Id FOREIGN KEY (UserTypeId) REFERENCES UserTypes(Id)) GO INSERT INTO [dbo].[Users] ([UserTypeId], [UserName]) VALUES ('80D1EEE7-0BCC-48A7-A741-29A1D8B6E580','Kushal Seth') GO
This '80D1EEE7-0BCC-48A7-A741-29A1D8B6E580'
is the userTypeId of ‘ADMI’ from the userType Table.
My problem is, Suppose, I need to run this script in a new DB, then my ID for ‘ADMI’ will be different in ‘UserTypes’ table. and the script will throw error while inserting into the ‘Users’ table.
One option I have is to declare the variable and select the ID from UserType Table and assign to this variable, and later use that in the insert query of [Users] table.
Is this the only approach? or is there a better way to design such tables. any Design suggestions would really be appreciated.
Advertisement
Answer
Suppose, I need to run this script in a new DB, then my ID for ‘ADMI’ will be different in ‘UserTypes’ table.
So remove the Guid PK from UserTypes, and make ‘UserCD’ the primary key.
CREATE TABLE [UserTypes] ( [UserCD] [varchar](40) NOT NULL PRIMARY KEY, [UserName] [varchar](100) NOT NULL ) GO INSERT INTO [dbo].[UserTypes] ([UserName], [UserCD]) VALUES ('Administrator','ADMI'), ('NonPrimary','NONP')
Which is better in every conceivable way.