Database design 数据库设计:如何设计数据库以避免同一产品的重复条目?

Database design 数据库设计:如何设计数据库以避免同一产品的重复条目?,database-design,Database Design,我有一张桌子的产品和尺寸。每个产品可以有多种尺寸。如何设计数据库以避免相同产品的重复条目?处理多个关系的典型方法是使用一个名为product_Size的映射表,该表包含每个表的主键 create table Product ( id uniqueidentifier not null, name varchar(255), primary key (id)) create table Size ( id int, name varchar(255),

我有一张桌子的产品和尺寸。每个产品可以有多种尺寸。如何设计数据库以避免相同产品的重复条目?

处理多个关系的典型方法是使用一个名为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))

多对多关系的典型方法是使用一个名为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))

视情况而定,每个产品可以有多种尺寸,但不同的产品可以有相同的尺寸吗

如果他们不能,那么您就有一个一对多关系,您需要一个ProductSize表来保存产品的主键

ProductSize(SizeID、ProductID、Size)

如果可以,那么您就有了一个多对多关系,您可以通过拥有三个表来打破这一关系:Product、Size和ProductSize,其中Product包含products、Size包含Size和ProductSize,通过按住Product和Size的主键,将每个产品映射到可用的大小

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

视情况而定,每个产品可以有多种尺寸,但不同的产品可以有相同的尺寸吗

如果他们不能,那么您就有一个一对多关系,您需要一个ProductSize表来保存产品的主键

ProductSize(SizeID、ProductID、Size)

如果可以,那么您就有了一个多对多关系,您可以通过拥有三个表来打破这一关系:Product、Size和ProductSize,其中Product包含products、Size包含Size和ProductSize,通过按住Product和Size的主键,将每个产品映射到可用的大小

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

试着这样做:

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

试着这样做:

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

这是家庭作业吗?如果是,请在[作业]上做标记。请告诉我们你到目前为止做了什么。这不是
www.do\u my\u homo\u for\u me.com
这不是家庭作业。是我在努力理解规范化。我已经创建了数据库和表,但我无法计算映射表…这是一个m:n关系。您无法避免重复您的产品或尺寸。这就是为什么你应该使用内存有效的主键。这是家庭作业吗?如果是,请在[作业]上做标记。请告诉我们你到目前为止做了什么。这不是
www.do\u my\u homo\u for\u me.com
这不是家庭作业。是我在努力理解规范化。我已经创建了数据库和表,但我无法计算映射表…这是一个m:n关系。您无法避免重复您的产品或尺寸。这就是为什么你应该使用内存效率高的主键。除非出于性能原因,我不会在表中使用唯一标识符作为主键,除非我别无选择。大多数情况下,INT是更好的选择。除非出于性能原因,我不会在表中使用唯一标识符作为PK,除非我别无选择。大多数情况下,整数是更好的选择。