2

テーブルのエントリに都市、国などのタイプを持たせたいとしますRegions。O/RM (私の場合は NHibernate) を使用すると仮定すると、このタイプを格納する受け入れられた方法は何ですか? 2 つのオプションが表示されます。

  • C# bussines レイヤーに型を含む列挙型を持ち、型を a としてtinyintテーブルに格納します。
  • RegionTypesタイプ識別子 (文字列または整数)を含むルックアップ テーブルを用意し、それらをRegionsテーブル内で参照します。

2 番目のアプローチは、データベースの観点からはより合理的と思われます。これは、外部キーの制約があり、さらに、地域の型に関する追加データを持つことができるためです。たとえば、都市は国の子型です (そして SQL Server 2008 を使用しているため)。空間機能、実際には空間操作のためにこの情報が必要です)。ただし、C# の観点から見ると、基本的にエンティティを持っていて、RegionTypeそれをリージョンに割り当てるたびにデータベースからロードする必要があります (NHibernate では型をルックアップテーブルに格納する場合は列挙型)。これは、リージョン タイプが基本的に固定されており、変更される可能性が低いことを知っているため、このような単純なタスクには少し面倒です。

DayOfWeek変更される可能性が低い、または追加のプロパティを持つ可能性が低いなど、ルックアップ テーブルとエンティティが必要な他の型についてはどうですか?

4

3 に答える 3

2

一般的なルールは、値のセットがユーザーによって変更されないことが確実な場合は、Enumを使用することです。それ以外の場合は、ルックアップ テーブルを使用することをお勧めします。

于 2009-08-14T17:32:30.633 に答える
1

ルックアップ テーブルを使用する理由の 1 つは、メニューなどで可能な値を表示するという一般的な使用例です。ルックアップ テーブルのクエリを実行するのは簡単ですが、列挙型がデータベースのデータ型や制約、または C# 列挙型でハードコードされている場合は、それほど簡単ではありません。

于 2009-08-14T17:26:57.260 に答える
0

私は通常後者のオプションを使用しますが、15種類のテーブルになってしまわないように、複数のタイプのアイテムを同じテーブルに格納できる一般的な種類のセットアップを作成します。基本はこんな感じ

Types
   TypeID int,
   Name varchar(20),
   Description varchar(100)

Type_Items
   ItemID int,
   TypeID int -> Types.TypeID,
   Name varchar(20),
   Description varchar(100),
   Value varchar(100)
于 2009-08-14T16:40:27.150 に答える