データベース行のフラグ、ベストプラクティス 質問する

データベース行のフラグ、ベストプラクティス 質問する

好奇心から質問しています。基本的に私の質問は、フラグのように動作する行エントリを必要とするデータベースがある場合、ベスト プラクティスは何ですか? 良い例としては、Stack Overflow のバッジや Bugzilla のオペレーティング システム フィールドが挙げられます。特定のエントリに対して、フラグの任意のサブセットを設定できます。

通常、私は C と C++ の仕事をしているので、直感的には、符号なし整数フィールドを反転可能なビットのセットとして使用することになります... しかし、いくつかの理由から、それが良い解決策ではないことはわかっています。 最も明白な理由はスケーラビリティです。フラグの数には厳しい上限があります。

他にも、スケーラビリティは向上するが、すべての情報を取得するために複数の選択が必要になるため、パフォーマンスの問題が発生するソリューションがいくつか考えられます。

では、これを「正しく」行う方法は何でしょうか?

ベストアンサー1

一般的に言えば、私はビットマスク フィールドを避けます。ビットマスク フィールドは将来読み取るのが難しいですし、理解するにはデータに関するより深い知識が必要です。

リレーショナル ソリューションは以前に提案されています。あなたが概説した例を考慮すると、次のようなものを作成します (SQL Server で)。


CREATE TABLE Users (
  UserId INT IDENTITY(1, 1) PRIMARY KEY,
  FirstName VARCHAR(50),
  LastName VARCHAR(50),
  EmailAddress VARCHAR(255)
);

CREATE TABLE Badges (
  BadgeId INT IDENTITY(1, 1) PRIMARY KEY,
  [Name] VARCHAR(50),
  [Description] VARCHAR(255)
);

CREATE TABLE UserBadges (
  UserId INT REFERENCES Users(UserId),
  BadgeId INT REFERENCES Badges(BadgeId)
);

おすすめ記事