PDA

View Full Version : relation ship جداول



ابراهیم1
یک شنبه 13 آذر 1390, 18:24 عصر
با سلام من داخل دیتابیس چند تا جدول دارم من باید پروژه ام تعیین کنم که هریک از این جداول چه ارتباطی با یکدیگر دارند منظورم1-1،1-n،m-n من شنیدم در access چنین قابلیتی بود که روابط را تعیین کند می خواستم بدونم در sql server2008 هم چنیین قابلیتی هست که این روابط را مشخص کند یا نه اگر لطف کنید جواب بدید ممنون میشم

computer _ student
چهارشنبه 23 آذر 1390, 06:27 صبح
سلام
گفتید "در access چنین قابلیتی بود که روابط را تعیین کند"
منظورتون اینه که به طور خودکار خودش این روابط را تشخیص میده؟
فکر نمیکنم این طور باشه
شما خودتون باید چندی روابط بین موجودیت ها راتشخیص بدید و جداول را درست طراحی کنید
بعد در محیط sql server 2008 در قسمت "database diagram" یک دیاگرام جدید ایجاد کنید و پس از اضافه کردن همه جداول از قبل ایجاد شده تان به دیاگرام،
با درگ کردن کلید های خارجی بر روی کلید های اصلی مربوطه ارتباط بین جداول ایجاد می شود.
اگه سوالی بود در خدمتم

یوسف زالی
چهارشنبه 23 آذر 1390, 08:31 صبح
سلام.
پست مناسب برای این سوال اینجاست:
http://barnamenevis.org/showthread.php?317824-تشخیص-relation-بین-2-تا-table-دیتابیس

hsl_hsv
یک شنبه 28 خرداد 1391, 17:31 عصر
این چندی ها کلا کاربردشون چیه؟
ما چندتا جدول داریم و هر Query بخواهیم توسط دستورات Sql نظیر Select و کاربرد Join از روی این جداول می گیریم ایجاد چندی یا Relation ship کاربردش چیه؟

Salah Sanjabian
دوشنبه 29 خرداد 1391, 17:54 عصر
فقط بحث کویری گرفتن نیست ، Constraint و محدودیت هایی که بااستفاده از کلید خارجی و کاهش افزونگی و ...........

hsl_hsv
دوشنبه 29 خرداد 1391, 18:45 عصر
میشه با مثال یکم توضیح بدین؟

Salah Sanjabian
سه شنبه 30 خرداد 1391, 10:38 صبح
اسکریپتی که میبینی دو تا جدول رو واست میسازه یکی Banks و یکی Account که رابطه 1 به n بین Banks و Account هست .یعنی هر بانک میتونه چند شماره حساب داشته باشه.
یکی از کار بردهاش اینه که شما به جای این که تو جدول Account یه فیلد بگذاری به اسم نام بانک میای کد بانک رو ذخیر میکنی . حالا فرض کن همون فیلد نام بانک رو داری و 1000 تا شماره حساب . شما به ازای هر شماره حساب فیلد نام بانک رو ذخیره باید کنی مثلا مسکن ، ملی ، و .................. تا 1000 مین رکورد حالا فرض کن رکورد هات به مییلیون و بیشتر برسه الکی داری نام بانک رو ذخیره میکنی ولی اگه یه بار مثلا نام بانک رو تو جدول بانک ذخیره کنی و تو جدول Account کد بانک رو دیگه خلاص میشی
:چشمک:
دوست عزیز بهتره یه کتاب دیتابیس بگیری بخونی همه اینا رو گفته

create database Bank
GO
/****** Object: Table [dbo].[Banks] Script Date: 06/19/2012 22:53:57 ******/
use Bank
go
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Banks](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[BranchName] [nvarchar](50) NULL,
[Branchcode] [nvarchar](50) NULL,
[Description] [nvarchar](300) NULL,
[Address] [nvarchar](300) NULL,
[Tel] [varchar](15) NULL,
[Fax] [varchar](15) NULL,
CONSTRAINT [PK_Bank_tbl] 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
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Account] Script Date: 06/19/2012 22:53:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Account](
[ID] [int] IDENTITY(1,1) NOT NULL,
[BankRef] [int] NULL,
[Type] [nvarchar](20) NULL,
[Number] [nvarchar](20) NULL,
[FirstPrice] [decimal](18, 0) NOT NULL,
[Date] [datetime] NULL,
[SumPrice] [decimal](18, 0) NOT NULL,
[Description] [nvarchar](300) NULL,
CONSTRAINT [PK_CompanyAccount_tbl] 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
/****** Object: Default [DF_Account_FirstPrice] Script Date: 06/19/2012 22:53:57 ******/
ALTER TABLE [dbo].[Account] ADD CONSTRAINT [DF_Account_FirstPrice] DEFAULT ((0)) FOR [FirstPrice]
GO
/****** Object: ForeignKey [FK_CompanyAccount_tbl_Bank_tbl] Script Date: 06/19/2012 22:53:57 ******/
ALTER TABLE [dbo].[Account] WITH CHECK ADD CONSTRAINT [FK_CompanyAccount_tbl_Bank_tbl] FOREIGN KEY([BankRef])
REFERENCES [dbo].[Banks] ([ID])
GO
ALTER TABLE [dbo].[Account] CHECK CONSTRAINT [FK_CompanyAccount_tbl_Bank_tbl]
GO

hsl_hsv
چهارشنبه 31 خرداد 1391, 00:30 صبح
دوست عزیز جان خوب الان من کی گفتم که هر بار اطلاعات مربوط به هر بانک تو هر رکورد جدول حساب ها ذخیره شه؟
منم همیشه همین کارو میکنم اما این relation ship که به شکل گرافیکی ایجاد میشه گفتم نیازم نشده و نیست حالا کاربرد ویژه ای داره بفرمائین , کتابشم مطالعه شده اما کاربردش برام روشن نیست
ببینین الان شما می خواهین 2 تا جدول داشته باشیم , یکی اطلاعات مربوط به بانک هارو تو رکورداش داشته باشه و دیگری شماره حساب ها
کاری که من می کنم اینه ::
جدول بانک ایجاد می کنم مثلا با فیلد های :: کد بانک , نام بانک و مشخصات دیگه ای که اون بانک میتونه داشته باشه ...
اینطوری یه دونه جدول دارم که تو هر رکوردش یه بانک تعریف شده , مثل بانک تجارت , بانک سامان و ...
جدول شماره حساب هارو ایجاد می کنم با فیلد های :: کد بانک , شماره حساب و مشخصات دیگه ای که هر شماره حساب میتونه داشته باشه ...
هر موقم میخام ببینم هر شماره حساب ماله کدوم بانکه خیلی راحت توسط اون کد بانک که تو رکوردهای شماره حساب هست یه کوئری ترکیبی با جدول بانک و شماره حساب ها می گیرم
به هر اطلاعات دیگه ای هم با این ساختار دست خواهم یافت و هیچی هم تکراری نیست , حالا اون relation ship که از جدولی به جدول دیگه می کشیم و چند به چند تعیین می کنیم و گرافیکی کار می کنیم هم اصلا ایجاد نکردیم , همین فقط می خواستم ببینم کاربرد اون چیه که هیچوقتم باهاش کار نمی کنم که اینطور که به نظر میاد همین کارائی که همیشه خودم دستی انجام میدادم به شکل گرافیکی انجام میده نه بیشتر حالا اگه کار بیشتری انجام میده بگین

Salah Sanjabian
چهارشنبه 31 خرداد 1391, 07:22 صبح
سلام. دوست عزیز یکی از کاربرداش کلید خارجی یا همون Referential Integrity ست یعنی شما حتما باید شماره بانکی رو که به جدول Account اضافه میکنیدحتما قبلش تو جدول بانک وجود داشته باشه و همچنین Cascading Referential Integrity Constraints . u. عکس زیر رو نگا کن که که اگه Delete , Update رو Cascade ست بشه به محض این که شماره بانک رو تو جدول بانک تغییر بدی همون شماره به طور خودکار تو جدول Account آپدیت میشه و همچنین واسه Delete که اگه یه بانک رو حذف کنی همون شماره بانک تو جدول Account حدف میشه . البته بستگی به پروژت داره که این محدودیت ها رو اعمال کنی
http://ecm.site11.com/photos/b4224068a41c.jpg