2010-07-14 98 views
1

我有一個表產品和表的大小。每個產品可以有多種尺寸。我如何設計我的數據庫以避免重複輸入同一產品?數據庫設計問題

預先感謝

+3

這是功課?如果是這樣,請將其標記[家庭作業]。請告訴我們你到目前爲止做了什麼。這不是'www.do_my_homework_for_me.com' – 2010-07-14 13:35:37

+0

這不是作業。這是我想了解正常化。我已經創建了數據庫和表,但是我無法確定映射表... – chchrist 2010-07-14 13:44:08

+0

這是一個m:n關係。您無法避免重複您的產品或您的尺寸。這就是爲什麼你應該使用內存有效的主鍵。 – 2010-07-14 13:53:12

回答

2

的典型方法的多對多關係是有稱爲Product_Size的映射表,其中包含的每個表的主鍵。

create table Product (
    id uniqueidentifier not null, 
    name varchar(255), 
    primary key (id)) 

create table Size (
    id int, 
    name varchar(255), 
    primary key (id)) 

create table Product_Size (
    productId uniqueidentifier, 
    sizeId int, 
    primary key (productId, sizeId), 
    foreign key (productId) references Product(id), 
    foreign key (sizeId) references Size(id)) 
+1

除非我沒有其他選擇,否則我不會在表中使用唯一標識符作爲表中的PK。 INT在大多數情況下是更好的選擇。 – HLGEM 2010-07-14 18:33:01

1
product Table 

1. product id 
2. product name 
...... 

Product Size 

1. Id 
2. ProductId(Foreign key form product table) 
3. Size 
1

這取決於每個產品可以有多種尺寸,但不同的產品可以有相同的大小?

如果他們不能那麼你有一個一對多的關係,你需要一個產品大小表,其中包含產品的主鍵。

ProductSize (SizeID, ProductID, Size)

如果可以的話,那麼你有一個多對多的關係,你可以有三個表,產品,規模和ProductSize,在產品中包含的產品,尺寸包含尺寸和ProductSize每一個產品映射分手這件事到可用尺寸,通過按住產品和尺寸的主鍵。

Product (ProductID, ProductName) 
Size (SizeID, SizeName) 
ProductSize (ProductID, SizeID) 
0

嘗試這樣:

Products 
---------- 
ProductID PK, auto increment int 
ProductName 
.... 

Sizes 
------- 
SizeID  PK, auto increment int 
SizeInfo 
.... 

ProductSizes 
-------------- 
ProductID PK, FK to Products.ProductID 
SizeID  PK, FK to Sizes.SizeID