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])