3

我想了解人们对最佳做法的看法。

使用外键定义表或在代码中使用常量是更好的做法吗?

场景是,有一个名为'car'的表'car'有一个名为'size'的列'size'只有2个可能的值。'BIG' 和 'SMALL' 不太可能出现新的尺寸值。例如,不需要“MEDIUM”。因此不需要管理大小。

前进的两种方法是:1)创建一个名为“car_types”的表,并将 BIG 和 SMALL 作为两行。然后有一个“汽车”表的外键。

2) 在一个类中有一个 const CAR_SIZE_BIG = 'BIG' const CAR_SIZE_SMALL = 'SMALL'。然后,'car' 表中的 'size' 列的类型为 VARCHAR(10)。它存储“大”或“小”

我了解选项 2 未标准化。但是,哪个是首选或更好的方法?

谢谢。开放供您反馈。

4

2 回答 2

3

选项 1,将所有数据定义保留在数据库层中。

于 2012-04-19T05:56:33.043 回答
3

选项 1 更好,因为选项 2 的问题是这是完全合法的,给汽车的尺寸是“edster”

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 表仅包含两条记录,这将因约束错误而失败

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

使用 FK 还有其他优点(例如,易于将标签 BIG 更改为 GRANDE、仅从数据库中明确定义的一组可能值等),但在这种情况下它们可能无关紧要。

于 2012-04-19T05:58:13.113 回答