2013-02-14 60 views
0

我是SQL初學者,希望確保我正在接近我正在創建的數據庫的正確架構設計。SQL Table設計風格:

我想出了一個簡單的例子,我的整體設計。

說我有一個表:

mysql> create table Animals(name varchar(255), flags int);

其中標誌保持真值用於動物的性質,如食肉動物,兩棲動物,哺乳動物,等等。

因爲int只是一個二進制數,所以我可以使用XOR來通過這些標記來篩選我想匹配的內容。

或者,我可以有一個這樣的表:

mysql> create table Animals(name varchar(255), flag1 bit, flag2 bit, flag3 bit);

我給這家值得關注的是:

是位浪費使用這種方法,或者如果我有標誌1 - flag8,一個字節將使用?

最後:

這甚至以適當的方式去這樣做這類設計的?如果沒有,一些指導將真正讚賞。

據我所知,我可以有一大堆食肉動物,兩棲動物,哺乳動物等等的表格,它們在哺乳動物中會有相同的名稱,這可以避免我想要使用標誌,浪費給我。

+0

您的表中只有一種可用類型(即動物只能是一種) – 2013-02-14 18:15:54

回答

3

要正確校準,您需要創建另一個表:

Animals (animalID, animalName) 
Flags (flagID, flagName) 
AnimalFlags (animalID, flagID) 

這將允許你,只要你想,而不必與XOR解析的混亂中每個動物儘可能多或儘可能少的標誌。

+0

這似乎是我考慮過的最好的方法。我非常感謝你的回答。謝謝。 – 2013-02-15 03:58:33

1

你最好爲動物創建一個表格,另一個用於類別,另一個用於將動物分配到一個類別。

create table Animals(AnimalID int, AnimalName varchar(255)); 
create table Categories(CategoryID int, CategoryName varchar(255)); 
create table AnimalCategoryLink(AnimalID int, CategoryID int); 

這會給你靈活的添加儘可能多的類別,你也可以在運行時添加類別。

您可以使用這些表格之間的JOIN根據需要進行過濾。