0

我是 SQL 的初学者,我想确保我正在为我正在创建的数据库进行正确的架构设计。

我想出了一个更简单的整体设计示例。

假设我有一张桌子:

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

其中 flags 保存动物属性的真值,例如食肉动物、两栖动物、哺乳动物等。

由于 int 只是一个二进制数,我可以使用 XOR 来过滤这些标志,以获得我想要匹配的内容。

或者我可以有一个这样的表:

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

我对此的担忧是:

使用这种方法是否会浪费位,或者如果我有 flag1 - flag8,将使用一个字节?

最终:

这甚至是进行这种设计的合适方法吗?如果没有,一些指导将不胜感激。

我知道我可以有大量的表格,比如食肉动物、两栖动物、哺乳动物等等,它们在哺乳动物中会有同名的条目,这可以避免我想要使用标志,但这对我来说几乎是浪费。

4

2 回答 2

3

要正确规范化,您需要创建另一个表:

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

这将允许您根据需要为每只动物拥有尽可能多或尽可能少的标志,而不必使用 XOR 进行解析。

于 2013-02-14T18:15:35.037 回答
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 进行过滤。

于 2013-02-14T18:22:23.707 回答