创建新 table 与添加新字段

Creating new table vs adding new field

我有以下数据:

面料成本

time     |   No fabric|BangloreSilk|Chanderi|.... <- fabric types
--------------------------------------------
01/15    |         40 |         25 |...
02/15    |         45 |         30 |...
.....    |        ... |        ... |...

染色成本

time     |   No fabric|BangloreSilk|Chanderi|.... <- fabric types
--------------------------------------------
01/15    |         40 |         25 |...
02/15    |         45 |         30 |...
.....    |        ... |        ... |...

这里的面料类型列表对于两个数据都是相同的。
现在要添加这些数据,我创建了下表:

fabric_type

id                  int
fabric_type_name    varchar

然后我有两种方法。

方法一:

fabric_cost

id                  int
fabric_type_id      int (foreign key to fabric_type)
cost                int

deying_cost

id                  int
fabric_type_id      int (foreign key to fabric_type)
cost                int

方法二:

fabric_overall_cost

id                  int
fabric_type_id      int (foreign key to fabric_type)
cost                int
fabric_or_dyeing    bit (to represent 0 for fabric cost and 1 for dyeing cost)

现在的问题是哪种方法会更好??

也许你可以创建另一个 table - cost_subjects

cost_subjects

id                  byte
subject             varchar

费用

id                  int
fabric_type_id      int (foreign key to fabric_type)
cost                int
cost_subject        byte (foreign key to cost_subjects table)

然后您可以 table 扩展更多主题以包含在结构成本中

这真的取决于您的要求。是否有其他列仅对 fabric_cost table 唯一?是否有其他列仅对 dyeing_cost table 唯一?意思是你的 2 table 会独立成长吗? 如果是,方法 1 更好。否则,方法 2 更好,因为您不需要在 2 个单独的 table 上执行 CRUD(以便于维护)。 另一种方法是:

id                  int
fabric_type_id      int (foreign key to fabric_type)
fabric_cost         float/double/decimal
dyeing_cost         float/double/decimal

第三种方法是如果你总是有两种成本。您可能不想使用 int 来支付费用。同样,这取决于您的要求。