【发布时间】:2017-02-26 14:05:30
【问题描述】:
佣金分类列应该能够存储最大为 99 的整数并命名为 comm_id。如果在添加行时未提供值,则 Comm_id 列的值应自动设置为值 10。福利代码列还应容纳最大为 99 的整数值并命名为 ben_id。
必须创建一个新表 commrate 来存储佣金率表,并且必须包含以下列:
comm_id:类似于添加到 ACCTMANAGER 表中的数字列
Comm_rank:可以存储坦克名称的字符字段,最多允许 15 个字符
Rate:可以存储两位十进制数字的数字字段(例如 .01 或 .03
必须创建一个新表,福利,以存储可用的福利计划选项,并且必须包含以下列:
ben_id:类似于添加到 acctmanager 表中的数字列
ben_plan:可以存储单个字符值的字符域
ben_provider:可以存储三位整数的数字字段
active: 一个可以保存 Y 或 N 值的字符域
我的 oracle 代码是
因为第一个表是 acctmanager
alter table ACCTMANAGER
add ( Comm_id number(2) default 10,
Ben_id number(2)
);
我选择数字的原因是因为它想要一个最大值为 99
第二张桌子
create table COMMRATE
( Comm_id number(2) default 10,
Comm_rank varchar2(15),
Rate number(0,2)
);
我认为这是对的,但我遇到的问题是 comm_rank,因为我可以选择 varchar2 或 char,但我更喜欢 varchar2
第三张福利表
create table BENEFITS
( Ben_id number(2),
Ben_plan char(1),
Ben_provider number(3),
Active varchar2(1)
);
活动的最后一列,我选择 varchar2,但我认为最好选择 char,因为它只是一个可以保存 Y 或 N 值的字符。或者我应该选择 char?
【问题讨论】:
-
如果这只是Oracle,那么这应该是这里唯一的标签。
-
天哪,您使用的是哪个 DBMS?您已经标记了它们,但它们并不相同。但是,在您标记的所有 3 个中,您应该放弃使用 Y 或 N 的想法。将其更改为位数据类型并将列命名为 IsActive。尽管这个问题过于宽泛且完全基于意见,但无论您如何分割它。因此,至少有两个原因,它离题了。
-
varchar或char在性能或存储要求方面绝对没有差异。我个人更喜欢number(1)(带有检查约束)作为穷人的解决方法,而不是 Oracle 中缺少的boolean数据类型(我尽量避免像 Y 或 N 这样的本地化值) -
comm_id应该是commrate中的PK(主键)和acctmanager中的FK(外键),引用commrate。与ben_rate类似。然后,如果您有数字应该是整数和非负数的要求,则应该在commrate和benefits中强制执行。active列应该有一个检查约束,以强制该值为Y或N(或为0 或1),无论您做出何种选择。您还需要决定它是否应该有一个 NOT NULL 约束。 -
另外,
comm_id在acctmanager中有一个默认值是有意义的,但在commrate中有一个默认值是没有意义的。