2013-02-14 65 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根据需要进行过滤。