3

ベストプラクティスについて人々の意見を聞きたいです。

定義テーブルに外部キーを使用するか、コードで定数を使用する方が良い方法ですか?

シナリオは次のとおりです。「車」というテーブルがあります。「車」には「サイズ」という列があります。「サイズ」には 2 つの値しかありません。「BIG」と「SMALL」 サイズの新しい値が存在する可能性はほとんどありません。たとえば、「MEDIUM」は必要ありません。したがって、サイズの管理は必要ありません。

次の 2 つの方法があります。1) 「car_types」という名前のテーブルを作成し、BIG と SMALL を 2 つの行にします。次に、'car' テーブルへの外部キーを取得します。

2) クラスに const CAR_SIZE_BIG = 'BIG' const CAR_SIZE_SMALL = 'SMALL' があります。次に、「car」テーブルの「size」列は VARCHAR(10) 型です。そして、「BIG」または「SMALL」のいずれかを格納します

オプション 2 が正規化されていないことを理解しています。しかし、どの方法が望ましいか、またはより良い方法ですか?

ありがとう。フィードバックのために開いています。

4

2 に答える 2

3

オプション 1。すべてのデータ定義をデータベース層に保持します。

于 2012-04-19T05:56:33.043 に答える
3

オプション2の問題は、これが完全に合法であり、車に「edster」のサイズを与えることであるため、オプション1の方が優れています。

INSERT INTO  car
 (Car_size, color)
Values
 ('edster', 'red')

オプション 1 では、それはできませんでした (最初に car_size テーブルに挿入しないと)。

この挿入は何もしません

INSERT INTO car
 (Car_size_id, color)
SELECT 
    car_size_id , 'red'
FROM
    car_size 
WHERE 
    car_size.name = 'edster'

car_size テーブルに 2 つのレコードしか含まれていないと仮定すると、これは制約エラーで失敗します。

INSERT INTO Car
 (Car_size_id, color)
Values  
 (3,'red')

FK を使用することには他にも利点があります (たとえば、ラベル BIG を GRANDE に簡単に変更できる、データベースのみから可能な値の明確に定義されたセットなど) が、この場合はおそらく重要ではありません。

于 2012-04-19T05:58:13.113 に答える