我的項目列表如下;這只是當然的一個總結。但是,我使用的是「細節」表中顯示的一種方法來表示一種「繼承」,可以這麼說 - 因爲「項目」和「可下載」將會是相同的,除了每一個都會有一些附加字段相關只對他們。不必要的冗餘表格
我的問題是在這種設計模式。這種事情在我們的項目中出現過很多次 - 是否有更聰明的方式來處理它?我基本上需要儘可能標準化表格。我對數據庫非常陌生,所以這對我來說都非常混亂。
共有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