আপনি যদি কোনও ব্যক্তির নাম প্রাথমিক কী হিসাবে ব্যবহার করেন এবং তার নাম পরিবর্তিত হয় তবে আপনাকে প্রাথমিক কীটি পরিবর্তন করতে হবে। এই কি ON UPDATE CASCADE
যেহেতু এটি মূলত ব্যবহার করা হয় ক্যাসকেড সব সংশ্লিষ্ট টেবিল প্রাথমিক কী বিদেশী কী সম্পর্ক আছে পরিবর্তন নিচে।
উদাহরণ স্বরূপ:
USE tempdb;
GO
CREATE TABLE dbo.People
(
PersonKey VARCHAR(200) NOT NULL
CONSTRAINT PK_People
PRIMARY KEY CLUSTERED
, BirthDate DATE NULL
) ON [PRIMARY];
CREATE TABLE dbo.PeopleAKA
(
PersonAKAKey VARCHAR(200) NOT NULL
CONSTRAINT PK_PeopleAKA
PRIMARY KEY CLUSTERED
, PersonKey VARCHAR(200) NOT NULL
CONSTRAINT FK_PeopleAKA_People
FOREIGN KEY REFERENCES dbo.People(PersonKey)
ON UPDATE CASCADE
) ON [PRIMARY];
INSERT INTO dbo.People(PersonKey, BirthDate)
VALUES ('Joe Black', '1776-01-01');
INSERT INTO dbo.PeopleAKA(PersonAKAKey, PersonKey)
VALUES ('Death', 'Joe Black');
একটি SELECT
উভয় টেবিল বিরুদ্ধে:
SELECT *
FROM dbo.People p
INNER JOIN dbo.PeopleAKA pa ON p.PersonKey = pa.PersonKey;
রিটার্নস:
যদি আমরা PersonKey
কলামটি আপডেট করে থাকি এবং আবার চালিত করি SELECT
:
UPDATE dbo.People
SET PersonKey = 'Mr Joe Black'
WHERE PersonKey = 'Joe Black';
SELECT *
FROM dbo.People p
INNER JOIN dbo.PeopleAKA pa ON p.PersonKey = pa.PersonKey;
আমরা দেখি:
উপরোক্ত UPDATE
বিবৃতিটির পরিকল্পনার দিকে তাকিয়ে আমরা পরিষ্কারভাবে দেখতে পেলাম যে উভয় টেবিলকে বিদেশী কী হিসাবে সংজ্ঞায়িত করে একটি একক আপডেটের বিবৃতি দ্বারা আপডেট করা হয়েছে ON UPDATE CASCADE
:
আরও স্পষ্টতার সাথে দেখতে চিত্রটিকে উপরে ক্লিক করুন
শেষ পর্যন্ত, আমরা আমাদের অস্থায়ী টেবিলগুলি পরিষ্কার করব:
DROP TABLE dbo.PeopleAKA;
DROP TABLE dbo.People;
সারোগেট কীগুলি ব্যবহার করে এটি করার জন্য পছন্দসই 1 টি উপায় হ'ল:
USE tempdb;
GO
CREATE TABLE dbo.People
(
PersonID INT NOT NULL IDENTITY(1,1)
CONSTRAINT PK_People
PRIMARY KEY CLUSTERED
, PersonName VARCHAR(200) NOT NULL
, BirthDate DATE NULL
) ON [PRIMARY];
CREATE TABLE dbo.PeopleAKA
(
PersonAKAID INT NOT NULL IDENTITY(1,1)
CONSTRAINT PK_PeopleAKA
PRIMARY KEY CLUSTERED
, PersonAKAName VARCHAR(200) NOT NULL
, PersonID INT NOT NULL
CONSTRAINT FK_PeopleAKA_People
FOREIGN KEY REFERENCES dbo.People(PersonID)
ON UPDATE CASCADE
) ON [PRIMARY];
INSERT INTO dbo.People(PersonName, BirthDate)
VALUES ('Joe Black', '1776-01-01');
INSERT INTO dbo.PeopleAKA(PersonID, PersonAKAName)
VALUES (1, 'Death');
SELECT *
FROM dbo.People p
INNER JOIN dbo.PeopleAKA pa ON p.PersonID = pa.PersonID;
UPDATE dbo.People
SET PersonName = 'Mr Joe Black'
WHERE PersonID = 1;
সম্পূর্ণতার জন্য, আপডেট বিবৃতিটির পরিকল্পনাটি খুব সহজ, এবং কীগুলি সারোগেট করার জন্য একটি সুবিধা দেখায়, যথা প্রাকৃতিক-কী দৃশ্যে কী থাকা প্রতিটি সারিটির বিপরীতে কেবলমাত্র একটি একক সারি আপডেট করা দরকার :
SELECT *
FROM dbo.People p
INNER JOIN dbo.PeopleAKA pa ON p.PersonID = pa.PersonID;
DROP TABLE dbo.PeopleAKA;
DROP TABLE dbo.People;
SELECT
উপরের দুটি বিবৃতি থেকে প্রাপ্ত ফলাফল :
মূলত, ফলাফল প্রায় একই। একটি প্রধান পার্থক্য হ'ল প্রশস্ত প্রাকৃতিক কীটি প্রতি টেবিলে পুনরায় হয় না যেখানে বিদেশী কী ঘটে। আমার উদাহরণে, আমি একটি ব্যবহার করছি VARCHAR(200)
কলাম ব্যক্তির নাম, প্রয়োজনীয়তা যা ব্যবহার রাখা VARCHAR(200)
সর্বত্র । যদি প্রচুর সারি এবং প্রচুর টেবিলের সাথে বিদেশী কী থাকে তবে এটি প্রচুর অপচয়যোগ্য স্মৃতি যুক্ত করবে। দ্রষ্টব্য, আমি ডিস্কের স্থান নষ্ট হওয়ার বিষয়ে কথা বলছি না কারণ বেশিরভাগ লোকেরা বলে যে ডিস্কের স্থানটি মূলত মুক্ত থাকার জন্য এতটাই সস্তা। মেমরিটি তবে ব্যয়বহুল এবং লালিত হওয়ার যোগ্য ser আপনি যখন প্রায় 15 টি অক্ষরের নামের গড় দৈর্ঘ্য বিবেচনা করেন তখন কীটির জন্য 4-বাইট পূর্ণসংখ্যা ব্যবহার করা বড় মাপের স্মৃতি সঞ্চয় করবে।
স্পর্শিনী সম্পর্কে প্রশ্নের কিভাবে এবং কেন কী পরিবর্তন করতে পারেন কেন ভাড়াটে চাবি তুলে প্রাকৃতিক কী পছন্দ করে, যা একটি আকর্ষণীয় এবং সম্ভবত আরও বেশি গুরুত্বপূর্ণ প্রশ্ন হল সম্পর্কে প্রশ্ন হল, বিশেষ করে যেখানে কর্মক্ষমতা একটি নকশা-লক্ষ্য। আমার প্রশ্নটি এখানে দেখুন ।
1 - http://weblogs.sqlteam.com/mladenp/archive/2009/10/06/Why-I-prefer-surrogate-keys-instead-of-n Natural - keys - in.aspx