微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 我应该在查找表中使用代码吗?

我正在使用Orable数据库,我正在添加几个查找表.

一般的问题是查找表是否应包含代码和描述,代码是FK返回主表,或者查找表是否只包含描述并且FK是否返回主表.

我在争论代码/描述对.我觉得如果我有type = Contractor和code = CN一个存储过程应该说type =’CN’而不是只有type = Contractor而没有代码并在存储过程中说这个:where type =’Contractor’因为如果我想显示如何:总承包商而不是承包商.然后我必须改变存储过程.我觉得我不应该这样做. (更改存储过程需要在dev中重新编译,迁移到测试,由客户端重新测试,以及迁移需要经历涉及两周等待期的变更控制过程的prod;而修改表中的记录则不需要任何这个的)

我的数据建模者只想使用描述.他的主要论点是,它需要一个无关紧要的联盟.

它应该以哪种方式完成?如果应该完成代码/描述方式,我该如何说服数据建模者?

谢谢!

type_cd    type_dsc
CN         Contractor
IN         Inspector

解决方法

总结所有答案,我认为查找表有四种选择:

备选方案1:
•描述(主键,更长的varchar2列)

备选方案2:
代码(主键,短varchar2列)
•描述(非空,varchar2列较长)

备选方案3:
•Id(无意义的主键,从序列派生的整数值)
•描述(非空,varchar2列较长)

备选方案4:
•Id(无意义的主键,从序列派生的整数值)
代码(唯一键,varchar2列较长)

主键列将位于主表中,顶部有外键约束.

每种选择的一些特征:

备选方案1:
查询主表时不需要连接
•在主表上进行临时查询时,清除含义
•主表需要更多存储空间
•主表上的索引将比其他替代方案大得多
•更新描述值意味着维护问题以及可能的应用程序停机时间.

备选方案2:
•要检索描述值时需要加入
•如果要过滤某些查找值,则不需要加入:您可以使用代码值.
•在主表上进行即席查询时非常清楚
•主表的最小额外存储要求
•主表上的索引很小.
•更新描述值很容易,但代码通常是描述的缩写.更新描述值时,代码可能会变得混乱.

备选方案3:
•要检索描述值时需要加入
•对某些查找值进行过滤时,您必须在查询中使用“描述”值,因为Id无意义.
•在主表上进行临时查询时,含义不明确
•主表的最小额外存储要求
•主表上的索引很小.
•更新描述值很容易,并且不会像代码值那样造成混淆

备选方案4:
•要检索描述值时需要加入
•对某些查找值进行过滤时需要加入,您可以在查找表中使用“代码”值.
•在主表上进行临时查询时,含义不明确
•主表的最小额外存储要求
•主表上的索引很小
•更新描述值很简单,您也可以非常轻松地更新代码值,使其类似于描述值.但是,在执行此操作时,您可能必须重新访问一些代码.

个人意见:

我会看看我打算如何使用主表和查找表.哪些查询很重要,必须高效运行?这些价值会改变吗?

我个人的选择是替代2或4.如果我绝对确定代码值永远不会改变,我会使用替代2.这很少见.国家代码更改,社会安全号码更改.货币代码改变,等等.因此,在大多数情况下,我会选择替代4.我不会太担心额外的连接,特别是因为查找表是一个小表.

但是:选择一个符合您要求的替代方案.

当您了解替代方案的更多特征时,请随时编辑文本.

问候,抢.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_no='LJCG001H' THEN dbo.ELTPNAME(a.fw_nu) ELSE d.fm_name END),e.fw_state_nm,f.fw_rmk_nm
if not exists(select name from syscolumns where name='tod_no' and id=object_id('iebo09d12')) alter table iebo09d12 add tod_no varchar(
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_nm,g.fa_name from LJSS007H a (nolock) Left join LJPA002H b (nolock) On a.pa_no =b.pa_no Left jo
要在 SQL Server 2019 中设置定时自动重启,可以使用 Windows 任务计划程序。下面是详细的步骤: 步骤一:创建批处理文件 打开记事本。 输入以下内容: net stop "SQL Server (MSSQLSERVER)" net start "SQ
您收到的错误消息表明数据库 'EastRiver' 的事务日志已满,导致数据库操作失败。要解决这个问题,可以按照以下步骤操作: 1. 备份事务日志首先,备份事务日志以释放空间: BACKUP LOG [EastRiver] TO DISK = N'C:\Backup\East
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标识ID,若不知道怎么查询数据库的标识ID, 打开SQL Server management studio,点击工具。选择SQL Server Profiler。 登录,登录成功后,如果有个默认弹窗,先取消 新建追踪 命名
--最新的解决方法 --先创建用户帐户,不进行授权,然后通过下面的SQL语句将该用户帐户关联至对应的数据库用户。优点是避免了重新授权的操作。 USE tempdbEXEC sp_change_users_login 'Update_One', 'iemis', &#3
命令: ALTER TABLE 表名 add 列名 数据类型 default 默认值 not null 例如: ALTER TABLE LJEL005H add el_req int default 15 not null
declare @i int set @i=340 while @i<415 begin set @i=@iʱ insert into LJWK007H select '2024','28','9110','3PTSD621000000