ورود

View Full Version : ليست خريد يك مشتري(در خواست sp)



mandana4450
پنج شنبه 08 اردیبهشت 1390, 11:57 صبح
سلام
من جدول دارم كه درآن اي دي (كليد اصلي)، اسم مشتري(از جدول ديگري خوانده مي شود وكليد خارجي است) وشرح محصولات است . كه يك مشتري مي تواند حدود 10جنس خريداري كند(يعني براي يك مشتري از 1الي10 ستون تشكيل شود).حال من يك Sp مي خواهم كه هرگاه اسم مشتري را وارد كردم كليه خريدهاي آن مشتري را بدست آورم

Galawij
پنج شنبه 08 اردیبهشت 1390, 12:07 عصر
CREATE PROCEDURE Return_Kharid(@CustomerID bigint)
As
Begin
Select * From TbKharid Where TbKharid.Customer_ID=@CustomerID
End

محمد سلیم آبادی
پنج شنبه 08 اردیبهشت 1390, 19:38 عصر
چرا از نام مشتری به عنوان کلید اصلی در جدول مشتریان استفاده کردین؟ مگر ممکن نیست که دو مشتری نام یکسانی داشته باشند. بهتر هست یک ستون دیگه با نام customer_nbr به جدول مشتریان اضافه کنید سپس از همین ستون به عنوان مرجع در جدول سفارشات استفاده کنید.
چرا تمام سفارشات را در یک سطر و چند ستون ذخیره می کنید؟
آیا 1 الی 10 خرید مربوط به یک سفارش است؟ به عبارت دیگر یک مشتری می تواند چندین سفارش بدهد و در هر سفارش از 1 تا 10 خرید انجام دهد؟

برای اینکه دیگران بتونند کمکتون کنند باید ساختار جداولتون رو بصورت DDL پست کنید.
با فرضیات من شما برای اینکه مجبور نباشید که سطرهای مربوط به مشتری را با همدیگر الحاقن کنید و به یک لیست تبدیل کنید آمدید همه را در یک سطر قرار دادید که این کار اشتباه هست و از نظر نرمالسازی مشکل دارد.
روشهای زیادی برای الحاق کردن سطرها وجود دارد که میشه بکار گرفت. نباید نگران این موضوع بود.

در هر حال من ساختار جدیدی را به شما معرفی می کنم که استاندارد و نرمال است:
یک جدول برای مشتریان و یکی برای اجناس و یک برای سفارشات:


CREATE TABLE Customers
(customer_nbr INTEGER NOT NULL PRIMARY KEY,
customer_name VARCHAR(50) NOT NULL, ...);

CREATE TABLE Objects
(object_nbr INTEGER NOT NULL PRIMARY KEY,
object_name VARCHAR(50));

CREATE TABLE Orders
(order_nbr INTEGER NOT NULL PRIMARY KEY,
order_date DATETIME
customer_nbr INTEGER REFERENCES Customers(customer_nbr),
objects_nbr INTEGER NOT NULL REFERENCES Objects(object_nbr));