আমি কীভাবে সিকিওএল সার্ভারে সবচেয়ে প্রাকৃতিক উপায়ে শূন্য-বা-একের সাথে শূন্য-বা-ওয়ান সম্পর্কের মডেল করব?
একটি 'হ্যাজার্ড' টেবিল রয়েছে যা কোনও সাইটে বিপত্তিগুলি তালিকা করে। কাজের জন্য একটি 'টাস্ক' সারণী রয়েছে যা কোনও সাইটে করা দরকার। কিছু টাস্ক একটি বিপত্তি ঠিক করতে হয়, কোনও কাজ একাধিক বিপদ মোকাবেলা করতে পারে না। কিছু হ্যাজার্ডগুলির সেগুলি ঠিক করার একটি কাজ রয়েছে। কোনও বিপত্তি তাদের সাথে দুটি কাজ যুক্ত থাকতে পারে না।
নীচে আমি ভাবতে পারি সেরা:
CREATE TABLE [dbo].[Hazard](
[HazardId] [int] IDENTITY(1,1) NOT NULL,
[TaskId] [int] NULL,
[Details] [varchar](max) NULL,
CONSTRAINT [PK_Hazard] PRIMARY KEY CLUSTERED
(
[HazardId] ASC
))
GO
ALTER TABLE [dbo].[Hazard] WITH CHECK ADD CONSTRAINT [FK_Hazard_Task] FOREIGN KEY([TaskId])
REFERENCES [dbo].[Task] ([TaskId])
GO
CREATE TABLE [dbo].[Task](
[TaskId] [int] IDENTITY(1,1) NOT NULL,
[HazardId] [int] NULL,
[Details] [varchar](max) NULL,
CONSTRAINT [PK_Task] PRIMARY KEY CLUSTERED
(
[TaskId] ASC
))
GO
ALTER TABLE [dbo].[Task] WITH CHECK ADD CONSTRAINT [FK_Task_Hazard] FOREIGN KEY([HazardId])
REFERENCES [dbo].[Hazard] ([HazardId])
GO
আপনি কি অন্যভাবে এটি করবেন? এই সেট আপটি নিয়ে আমি সন্তুষ্ট না হওয়ার কারণটি হ'ল যে কাজগুলি এবং বিপদগুলি একে অপরের দিকে নির্দেশ করে এবং অন্য কাজ ও বিপত্তিগুলির দিকে লক্ষ্য করে না এবং কোনও কার্য / বিপত্তি একই বিপদ / কার্যকে নির্দেশ করে না তা নিশ্চিত করার জন্য অ্যাপ্লিকেশন যুক্তি থাকা দরকার sure অন্য একটি কাজ / বিপত্তি নির্দেশ করে।
একটি ভাল উপায় আছে কি?
null
।
CREATE UNIQUE INDEX x ON dbo.Hazards(TaskID) WHERE TaskID IS NOT NULL;