سلام
نمیدونم در مورد نرمال سازی مطالعه داشتی ؟
1- تمام کاربران با توجه به اینکه در ابتدا رفتار مشابهی انجام میدن باید در یک جدول نگهداری بشوند . این رفتار هم در ابتدایی ترین سطح اینه که همه کاربر سایت هستند. پس فقط کافیه یک جدول داشته باشی که اطلاعات زیر را برای تمام کاربران در این جدول نگهداری کنی . تمام کاربران شامل Admin , NewsWrite , GUser یا هر نوع دیگری از کاربران که ممکنه در آینده بخوان کاربر سایت بشن
2- انواع کاربران را هم در یک جدول دیگر نگهداری کن تا بتونی بدون دستکاری در هارد کد براحتی دامنه فعالیت سایت را افزایش بدی . مثلا خبرنگار افتخاری یا کاربر خاص یا هر مفهوم دیگه ای که ممکنه بعدا بوجود بیاد . تا اینجاشو برات با نمونه مثال میزنم
--------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[UserType](
[TypeID] [tinyint] IDENTITY(1,1) NOT NULL,
[utTypeTitle] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_UserType] PRIMARY KEY CLUSTERED
(
[TypeID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Users](
[UserID] [int] IDENTITY(1,1) NOT NULL,
[uUsername] [nvarchar](20) NOT NULL,
[uPassword] [nvarchar](100) NOT NULL,
[uFirstName] [nvarchar](50) NULL,
[uLastName] [nvarchar](50) NULL,
[uEmail] [nvarchar](255) NULL,
[uStatus] [tinyint] NULL,
[uRegisterDate] [datetime] NULL,
[uGender] [bit] NULL,
[UserTypeID] [tinyint] NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Users] WITH CHECK ADD CONSTRAINT [FK_Users_UserType] FOREIGN KEY([UserTypeID])
REFERENCES [dbo].[UserType] ([TypeID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Users] CHECK CONSTRAINT [FK_Users_UserType]
GO
تمام ویژگی های منحصر به فرد کاربران را خودت میتونی به جدول Users اضافه کنی مثل تلفن یا آدرس .
-------------------------------------------------------------------------------------------------------------------
3- هر نوع داده دیگری که مربوط به نقش کاربر میشه باید در یک جدول دیگه قرار بگیره و فقط با فیلد UserID در ارتباط باشه . وقتی کاربری لاگین میکنه ارتباطش با جدول نقش تعیین کننده اینه که باید به کدوم پنل هدایت بشه . مثلا اگه نوع کاربر Admin باشه باید پنل ادمین و اگه کاربر عادی باشه صفحه اول سایت یا پروفایل کاربری خودشو ببینه . اینو باید تو کد مشخص کنی.
فراموش نکن که نگهداری ستون های نام و نام خانوادگی و username , password درجداول جداگانه اشتباه است