0

私は SQL の初心者であり、作成中のデータベースの適切なアーキテクチャ設計に近づいていることを確認したいと考えています。

全体的なデザインのより簡単な例を考え出しました。

テーブルがあるとします:

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

flags は、肉食動物、両生類、哺乳類などの動物の特性の真理値を保持します。

int は単なる 2 進数であるため、XOR を使用してこれらのフラグをフィルター処理し、一致させたいものを見つけることができます。

または、次のようなテーブルを作成できます。

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

これに対する私の懸念は次のとおりです。

このアプローチを使用するとビットが無駄になりますか、または flag1 - flag8 がある場合、1 バイトが使用されますか?

最終的に:

これは、この種の設計を行うための適切な方法ですか? そうでない場合は、いくつかのガイダンスをいただければ幸いです。

たとえば、肉食動物、両生類、哺乳類など、哺乳類で同じ名前のエントリを持つテーブルが大量にある可能性があることを理解しています。これにより、フラグを使用したくないのですが、それはほとんど無駄に思えます。

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 に答える