Bahsetmeye çalıştığım yapı şu şekildeydi, belki birilerinin işine yarar. (Dediğim gibi bu tür konular çok keyifli.)
CREATE TABLE [dbo].[Musteri](
[Musteri_ID] INT IDENTITY(1,1) NOT NULL,
[Musteri_No] VARCHAR(50) NULL,
[Musteri_Adi] VARCHAR(100) NOT NULL,
[Musteri_Soyadi] VARCHAR(100) NULL,
[Eklenme_Zamani] DATETIME NOT NULL,
[Guncelleme_Zamani] DATETIME NOT NULL
)
CREATE TABLE [dbo].[Adres](
[Adres_ID] INT IDENTITY(1,1) NOT NULL,
[Musteri_ID] INT NOT NULL,
[Adres] VARCHAR(200) NULL,
[Sehir] VARCHAR(50) NULL,
[Ilce] VARCHAR(50) NULL,
[Telefon] VARCHAR(50) NULL,
[EPosta] VARCHAR(50) NULL,
[Eklenme_Zamani] DATETIME NOT NULL,
[Guncelleme_Zamani] DATETIME NOT NULL
)
CREATE TABLE [dbo].[Siparis](
[Siparis_ID] INT IDENTITY(1,1) NOT NULL,
[Durum] INT NOT NULL, --0 : Hazırlanıyor / 1 : Teslim edildi / 2 : iptal vb...
[Siparis_NO] VARCHAR(50) NULL, --Numeratörden otomatik sipariş no alır. Sip.0000001 gibi.
[Musteri_ID] INT NOT NULL,
[Musteri_Unvani] VARCHAR(200) NULL, --Müşterinin Adı Soyadı set edilir.
[Teslimat_Adresi_ID] INT, --Adres tablosundaki, Adres_ID den ilişkiyi kurar.
[Adres] VARCHAR(200) NULL, --Adres_ID'den seçilen değer otomatik set edilir, kullanıcı değiştirebilir.
[Sehir] VARCHAR(50) NULL, --Adres_ID'den seçilen değer otomatik set edilir, kullanıcı değiştirebilir.
[Ilce] VARCHAR(50) NULL, --Adres_ID'den seçilen değer otomatik set edilir, kullanıcı değiştirebilir.
[Telefon] VARCHAR(50) NULL, --Adres_ID'den seçilen değer otomatik set edilir, kullanıcı değiştirebilir.
[EPosta] VARCHAR(50) NULL, --Adres_ID'den seçilen değer otomatik set edilir, kullanıcı değiştirebilir.
[Eklenme_Zamani] DATETIME NOT NULL,
[Guncelleme_Zamani] DATETIME NOT NULL
)
CREATE TABLE [dbo].[Birim](
[Birim_ID] INT IDENTITY(1,1) NOT NULL,
[Birim_Kodu] VARCHAR(100) NULL, --Ad. Lt, Kg gibi kısaltmalar için kullanılabilir.
[Birim_Adi] VARCHAR(200) NOT NULL --Adet, Litre, Kilogram gibi daha uzun açıklaması yazılır.
)
CREATE TABLE [dbo].[Urun](
[Urun_ID] INT IDENTITY(1,1) NOT NULL,
[Urun_Kodu] VARCHAR(100) NULL, --Numeratörden otomatik kod atanabilir. Ürün.000001 gibi.
[Urun_Adi] VARCHAR(200) NOT NULL, --Boş olmamalı.
[Birim_ID] VARCHAR(200) NOT NULL, --Boş olmamalı. Birim tablosundaki Birim_ID ile ilişkili.
[Satis_Birim_Fiyati] FLOAT NOT NULL, --Sabit bir fiyattan satilan bir ürün ise. (Her müşteriye.)
)
CREATE TABLE [dbo].[Siparis_Satiri](
[Siparis_Satiri_ID] INT IDENTITY(1,1) NOT NULL,
[Siparis_ID] INT NOT NULL, --Sipariş tablosundaki, Siparis_ID alanı ile ilişkili.
[Urun_ID] INT NOT NULL, --Urunler Tablosundaki, Urun_ID ile ilişkili.
[Urun_Aciklamasi] VARCHAR(200) NULL, --Ürün adının haricinde ekstra ürün ile ilgili eklenmek istenen not.
[Miktar] FLOAT NOT NULL, --Boş olmamalı.
[Birim_ID] INT NOT NULL, --Ürün kartındaki Birim_ID çekilebilir. İsteğe göre diğer birimler seçilebilir.
[Birim_Fiyat] FLOAT NOT NULL, --Boş olmamalı. Boş ise 0'a set edilmeli.
[Tutar] FLOAT NOT NULL, --Miktar x Birim Fiyat.
)
ALTER TABLE [dbo].[Siparis_Satiri] WITH NOCHECK ADD FOREIGN KEY([Siparis_ID])
REFERENCES [dbo].[Siparis] ([Siparis_ID])
ALTER TABLE [dbo].[Adres] WITH NOCHECK ADD FOREIGN KEY([Musteri_ID])
REFERENCES [dbo].[Musteri] ([Musteri_ID])
ALTER TABLE [dbo].[Siparis] WITH NOCHECK ADD FOREIGN KEY([Musteri_ID])
REFERENCES [dbo].[Musteri] ([Musteri_ID])
ALTER TABLE [dbo].[Siparis] WITH NOCHECK ADD FOREIGN KEY([Teslimat_Adresi_ID])
REFERENCES [dbo].[Adres] ([Adres_ID])
ALTER TABLE [dbo].[Urun] WITH NOCHECK ADD FOREIGN KEY([Birim_ID])
REFERENCES [dbo].[Birim] ([Birim_ID])
ALTER TABLE [dbo].[Siparis_Satiri] WITH NOCHECK ADD FOREIGN KEY([Siparis_ID])
REFERENCES [dbo].[Siparis] ([Siparis_ID])
ALTER TABLE [dbo].[Siparis_Satiri] WITH NOCHECK ADD FOREIGN KEY([Birim_ID])
REFERENCES [dbo].[Birim] ([Birim_ID])