我正在寻找一种好的实现方法 - 对象的默认特性并覆盖数据库中的默认值。
我有一个名为Products的表 - 它维护产品列表 其中一个产品是邮箱,属性颜色的值为蓝色 当国家/地区是英国时,我需要能够指定邮箱是红色的 我不想为每个国家/地区创建一行,而是希望能够说明该国家/地区是否没有条目使用默认值。
我在产品表中有多个产品
TIA
答案 0 :(得分:2)
这个解决方案怎么样:
Products(#product_id,...,color)
ProductLocalization(#country_id,color,...)
您还可以创建视图以简化数据访问:
CREATE VIEW LocalProducts
AS
SELECT p.product_id,...,country_id=[default],p.color
FROM Products p
UNION ALL
SELECT p.product_id,...,pl.country_id,pl.color
FROM Products p, ProductLocalization pl
[default]占位符应该是默认值,具体取决于country_id的数据类型。它可以是varchar类型的“默认”或int类型的0(实际国家的有效ID应该在1到N的范围内)。
当您需要本地化国家/地区的产品时,您只需将产品功能的记录添加到具有特定country_id的表ProductLocalization中。
答案 1 :(得分:0)
如果您使用的是具有触发器的DMBS,则可能是使用它们的好时机。
我会为颜色列指定一个默认值,但是有一个触发器可以在插入时检查国家/地区,并且可以根据需要覆盖该默认值。
答案 2 :(得分:0)
这个问题非常开放。您使用的是哪个DBMS?你对默认值以外的表格设计有什么发言权吗?如果是这样,我建议考虑一个新设计,因为您的关联不允许您需要启用的约束。无论你做什么,听起来你都在考虑将逻辑放在默认值中,这有点不正统。
我的建议是考虑将这个逻辑放在应用程序中,或者最坏的情况下,将其置于像Abe建议的触发器中。