我的项目列表如下;这只是当然的一个总结。但是,我使用的是“细节”表中显示的一种方法来表示一种“继承”,可以这么说 - 因为“项目”和“可下载”将会是相同的,除了每一个都会有一些附加字段相关只对他们。不必要的冗余表格
我的问题是在这种设计模式。这种事情在我们的项目中出现过很多次 - 是否有更聪明的方式来处理它?我基本上需要尽可能标准化表格。我对数据库非常陌生,所以这对我来说都非常混乱。
共有5项。奖项,项目,购买,标记和下载。它们都非常非常相似,除了每个数据都有一些与自身相关的数据。我试图使用一个声明字段(如枚举类型'字段)与可为空的列,但我被告知这是一个不好的方法。我所做的是将所有相似的东西放在一个表中,然后每个类型都有自己的表,引用'基'表中的一列。
问题发生在关系或连接处。将所有这些链接返回给客户。每种类型都需要大约2个额外的表来正确连接所有的数据 - 因此,我的数据库变得非常非常大。这种行为有更聪明的做法吗?
Item
ID | GUID
Name | varchar(64)
Product
ID | GUID
Name | varchar(64)
Store | GUID [ FK ]
Details | GUID [FK]
Downloadable
ID | GUID
Name | varchar(64)
Url | nvarchar(2048)
Details | GUID [FK]
Details
ID | GUID
Price | decimal
Description | text
Peripherals [ JUNCTION ]
ID | GUID
Detail | GUID [FK]
Store
ID | GUID
Addresses | GUID
Addresses
ID | GUID
Name | nvarchar(64)
State | int [FK]
ZipCode | int
Address | nvarchar(64)
State
ID | int
Name | varchar(32)
你的第一种方法联系业务含义为行(类型#3 = “下载”)。这通常不是一个好的做法,因为该模型不能完全反映设计。你的第二种方法是基于元数据的,如果这是需要的,那很好,但是它往往会因系统中的大量数据而表现不佳,并且需要一些数据维护(孤儿行等)。这种方法也被称为实体属性值或EAV。 – 2010-03-21 00:29:52
对不起,读回来听起来比我想要的更传诵和迂腐。 :) – 2010-03-21 00:44:05