ورود

View Full Version : insert در ارتباط چند به چند



feridoon
پنج شنبه 10 دی 1388, 13:25 عصر
سلام دوستان
به کمکتون احتیاج داشتم
البته جستجو کردم اما به نتیجه ای نرسیدم
در پایگاه داده هنگام کار با جداول ، وقتی 2 موجودیت با هم ارتباط چند به چند داشته باشند ، بین آنها از یک جدول کمکی استفاده می کنیم تا این ارتباط چند به چند به 2 ارتباط یک به چند شکسته بشه،

مثلا هر مشتری می تواند چندین کالا خریداری کند و هر کالا می تواندبه چندین مشتری تعلق داشته باشد. در این صورت در بین این جداول از یک جدول کمکی استفاده می کنیم که هم id مشتری و هم id کالا رو ذخیره میکنه.

حالا مشکل من در ذخیره کردن در این جداول هست. دستورات insert و delete و update برای این کار باید به چه شکل باشد.
بار اول که میخواهیم اطلاعات مشتری را ذخیره کنیم اطلاعات مشتری را با id آن را نیز در جدول کمکی همراه با id کالای مورد نظر ذخیره می کنیم.
دفعه دوم که برای همان مشتری می خواهیم کالایی ذخیره کنیم ،برای اینکه از افزونگی جلوگیری کنیم دیگر اطلاعات همان مشتری را ذخیره نکرده و id قبلی مشتری را با id کالای مورد نظر در جدول کمکی ذخیره می کنیم. آیا قبل از ذخیره باید نام آن مشتری را در جدول مشتری جستجو کنم و اگر وجود نداشت ذخیره نکنیم ؟

اگه دوستان یک نمونه کوچکی داشته باشند که در این زمینه کمک کند ممنون میشم که برای دانلود بزارن استفاده کنیم. :لبخندساده::لبخندساده::لبخن ساده:
با تشکر

FastCode
پنج شنبه 10 دی 1388, 15:06 عصر
CREATE TABLE [dbo].[Kala](
[Code] [numeric](18, 0) NOT NULL,
[Name] [nvarchar](50) NULL,
[Mablaghkharid] [numeric](14, 0) NULL,
[Mablaghfrosh] [numeric](18, 0) NULL,
[MablaghMasraf] [numeric](18, 0) NULL,
[Tedaddarbasteh] [numeric](18, 0) NULL,
[NoeBasteh] [int] NULL,
[Mojaval] [numeric](18, 0) NULL,
[Company] [int] NULL,
[Barcode] [numeric](38, 0) NULL,
[Sefaresh] [numeric](18, 0) NULL,
[keraieh] [numeric](8, 0) NULL,
[Vazn] [float] NULL,
[Tool] [numeric](12, 0) NULL,
[Arz] [numeric](12, 0) NULL,
[Ertefa] [numeric](12, 0) NULL,
[Hidden] [bit] NOT NULL,
CONSTRAINT [PK_Kala] PRIMARY KEY CLUSTERED
(
[Code] 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].[Moshtary](
[Code] [numeric](18, 0) NOT NULL,
[Name] [nvarchar](50) NULL,
[Tel] [nvarchar](30) NULL,
[Fax] [nvarchar](30) NULL,
[Mobile] [nvarchar](30) NULL,
[Froshgah] [nvarchar](25) NULL,
[Malek] [bigint] NULL,
[Faaliat] [bigint] NULL,
[Zamen] [numeric](18, 0) NULL,
[Mantaghe] [bigint] NULL,
[Masir] [bigint] NULL,
[Radif] [bigint] NULL,
[Etebar] [numeric](18, 0) NULL,
[BedehiAvalie] [numeric](38, 0) NULL,
[Address] [nvarchar](100) NULL,
[Visitor] [bigint] NULL,
CONSTRAINT [PK_Moshtary_1] PRIMARY KEY CLUSTERED
(
[Code] 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].[Factor_Frosh](
[Index] [numeric](28, 0) NOT NULL,
[CodeMosh] [numeric](18, 0) NULL,
[FactorNumber] [numeric](18, 0) NULL,
[Date] [char](10) NULL,
[Visitor] [bigint] NULL,
[Darsad] [float] NULL,
[Kasry] [float] NULL,
[Ezafat] [float] NULL,
[Havale] [bigint] NULL,
[Bargasht] [bit] NOT NULL,
[Sort] [numeric](18, 0) NULL,
CONSTRAINT [PK_Factor] PRIMARY KEY CLUSTERED
(
[Index] 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].[Factor_Frosh] WITH CHECK ADD CONSTRAINT [FK_Factor_Moshtary] FOREIGN KEY([CodeMosh])
REFERENCES [dbo].[Moshtary] ([Code])
ON UPDATE CASCADE
ON DELETE CASCADE
CREATE TABLE [dbo].[FactorKala_Frosh](
[ID] [numeric](18, 0) NOT NULL,
[Index] [numeric](28, 0) NOT NULL,
[Code] [numeric](18, 0) NOT NULL,
[Count] [numeric](28, 0) NULL,
[Mablagh] [numeric](18, 0) NULL,
[Darsad] [numeric](18, 2) NULL,
[AsPrize] [bit] NOT NULL,
CONSTRAINT [PK_FactorKala] PRIMARY KEY CLUSTERED
(
[ID] 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].[FactorKala_Frosh] WITH CHECK ADD CONSTRAINT [FK_FactorKala_Factor] FOREIGN KEY([Index])
REFERENCES [dbo].[Factor_Frosh] ([Index])
ON UPDATE CASCADE
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[FactorKala_Frosh] CHECK CONSTRAINT [FK_FactorKala_Factor]
GO

ALTER TABLE [dbo].[FactorKala_Frosh] WITH CHECK ADD CONSTRAINT [FK_FactorKala_Kala] FOREIGN KEY([Code])
REFERENCES [dbo].[Kala] ([Code])
ON UPDATE CASCADE
GO

من از این تیبل ها استفاده می کنم.
هر مشتری n فاکتور داره .
هر فاکتور m کالا داره که کالاهاش توی جدول کالا تعریف شدن.
فایل sql2008: