数据库设计--只有一条记录的表有必要吗?

berg369 2017-06-26 11:02:30
有时,系统要存储一组全局变量,于是设计一个表,只有一条记录,有十几个或几十个各种类型的字段,感觉这种一条记录的表,完全没有利用到关系型数据库的各种特性,有必要吗?
但是如果不用数据库存放,在集群中就涉及复制和同步问题,数据库作为应用集群中公共的存储,能够保持一致性,所以,我们不考虑脱离数据库的存储方式,那么,这种一条记录的表,有什么好的设计思模式呢?
...全文
1666 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouyuehai1978 2017-06-28
  • 打赏
  • 举报
回复
抽取类似需求建一张设置表不就好了 现在只有一条,以后别的地方要用设置参数什么的,又可以加一条。 类似 主键,设置点,设置参数之类的
我就是A 2017-06-27
  • 打赏
  • 举报
回复
其实字典表的设计是根据你们系统的需求来的,并不是全都如你现在看到的这样,仅是一个字段或一行数据的这样的表。 实际上字典表在系统中有很多种也应用很广,并不是只会给开发人使用,恰恰相反,很多这类表中设计的数据值是关乎今后实施的。 所以你有机会可以多看看其他的系统,在回过头看看你的问题。
Ny-6000 2017-06-27
  • 打赏
  • 举报
回复
引用 6 楼 zbdzjx 的回复:
这种情况,还是习惯放在数据库中。个人感觉:数据库,最重要的功能就是存数据。
当然有必要的. 相当于是系统配置,,存库中多灵活呀.
吉普赛的歌 2017-06-26
  • 打赏
  • 举报
回复
再说了, 你觉得一行记录这么好, 就不需要发贴了吧
吉普赛的歌 2017-06-26
  • 打赏
  • 举报
回复
另外, 你回复时可以点一下右下角的引用, 方便其它人及时看到。
吉普赛的歌 2017-06-26
  • 打赏
  • 举报
回复
引用 7 楼 berg369 的回复:
如果这个表设计成字典表形式,每个属性一条记录,那么值都只能用一种类型存放,需要转换,而且存取多条记录不如存取一条简单。所以感觉还是一条记录的表存放全局变量更好,这些变量中,有的变量甚至是一个大的配置文件(长度超过10000字符),保存着具体的配置项,如果用字典表,需要都用clob来存放值才能满足。 另外,日常维护,只对这些属性进行修改而不会增删,只有版本升级时,才会添加或删除列(对应的程序也同时修改),这些属性是相对固定的,改为多行存储,那么这些属性就成为一些可变的数据值,反而不够稳定。
你想得太复杂了, 程序启动时时获取一次值即可, 启动后再次取值不过时取这些在缓存里面的值, 效率并不低的。 反复从数据库里取值, 再快也有损耗。
berg369 2017-06-26
  • 打赏
  • 举报
回复
如果这个表设计成字典表形式,每个属性一条记录,那么值都只能用一种类型存放,需要转换,而且存取多条记录不如存取一条简单。所以感觉还是一条记录的表存放全局变量更好,这些变量中,有的变量甚至是一个大的配置文件(长度超过10000字符),保存着具体的配置项,如果用字典表,需要都用clob来存放值才能满足。 另外,日常维护,只对这些属性进行修改而不会增删,只有版本升级时,才会添加或删除列(对应的程序也同时修改),这些属性是相对固定的,改为多行存储,那么这些属性就成为一些可变的数据值,反而不够稳定。
zbdzjx 2017-06-26
  • 打赏
  • 举报
回复
这种情况,还是习惯放在数据库中。个人感觉:数据库,最重要的功能就是存数据。
吉普赛的歌 2017-06-26
  • 打赏
  • 举报
回复
应该用字典表, 而不是这种。 这种一条记录的表, 如果要扩展, 只能加列, 非常不灵活。 改为字典表, 如果有新的配置, insert 一条记录就好, 完全不需要改表结构。
IF OBJECT_ID('[dbo].[config_data]') IS NOT NULL
	DROP TABLE [dbo].[config_data]
GO
CREATE TABLE [dbo].[config_data]
(
	[id]           [int] IDENTITY(1, 1) NOT NULL,
	[key]          [nvarchar](50) NOT NULL,
	[value]        [nvarchar](MAX) NULL,
	[remark]       [nvarchar](255) NULL,
	CONSTRAINT [PK_dc_config] PRIMARY KEY NONCLUSTERED([id] ASC),
	CONSTRAINT [UQ_dc_config_key] UNIQUE CLUSTERED([key])
)
berg369 2017-06-26
  • 打赏
  • 举报
回复
用xml等物理文件,涉及到在集群中同步的问题,在数据库中便于集群中各应用节点的共享,所以正在把.properties及.xml文件的配置往数据库中迁移,所以有了这个疑问。
二月十六 2017-06-26
  • 打赏
  • 举报
回复
引用 2 楼 berg369 的回复:
写死就成常量了,还是要维护修改的,随着版本升级,可能还会增加字段。 如果这个表设计成键值对形式,每个属性一条记录,那么值都只能用一种类型存放,需要转换,而且存取多条记录不如存取一条简单。所以感觉还是一条记录的表存放全局变量更好,这些变量中,有的变量甚至是一个大的配置文件,保存着具体的配置项。 但是一条记录的表,似乎主键都可以没有,感觉很奇怪。
如果放到程序也可以,用xml等物理文件也可以,可以读取维护
berg369 2017-06-26
  • 打赏
  • 举报
回复
写死就成常量了,还是要维护修改的,随着版本升级,可能还会增加字段。 如果这个表设计成键值对形式,每个属性一条记录,那么值都只能用一种类型存放,需要转换,而且存取多条记录不如存取一条简单。所以感觉还是一条记录的表存放全局变量更好,这些变量中,有的变量甚至是一个大的配置文件,保存着具体的配置项。 但是一条记录的表,似乎主键都可以没有,感觉很奇怪。
二月十六 2017-06-26
  • 打赏
  • 举报
回复
把这组全局变量,写死在程序里可以满足吗?
吉普赛的歌 2017-06-26
  • 打赏
  • 举报
回复
引用 11 楼 berg369 的回复:
当然性能不是问题,我只是觉得这种用法很奇怪,用一条不需要主键的记录来保存变量,反而比用字典表形式更稳定,当系统迁移或者部署新系统时,实施人员不用关心字典表中有哪些key,我想我了解一下是否有更好的方案,或者说虽然无主键单行记录的表很奇怪,但确实很好用?
其实这根本不是一个数据库问题, 而是开发问题了。 如果你用到的配置不多, 无所谓, 怎么都行。 如果开发人员较多, 而且经常加配置, 字典表更合适——扩展性更好。
berg369 2017-06-26
  • 打赏
  • 举报
回复
引用 8 楼 yenange 的回复:
[quote=引用 7 楼 berg369 的回复:] 如果这个表设计成字典表形式,每个属性一条记录,那么值都只能用一种类型存放,需要转换,而且存取多条记录不如存取一条简单。所以感觉还是一条记录的表存放全局变量更好,这些变量中,有的变量甚至是一个大的配置文件(长度超过10000字符),保存着具体的配置项,如果用字典表,需要都用clob来存放值才能满足。 另外,日常维护,只对这些属性进行修改而不会增删,只有版本升级时,才会添加或删除列(对应的程序也同时修改),这些属性是相对固定的,改为多行存储,那么这些属性就成为一些可变的数据值,反而不够稳定。
你想得太复杂了, 程序启动时时获取一次值即可, 启动后再次取值不过时取这些在缓存里面的值, 效率并不低的。 反复从数据库里取值, 再快也有损耗。 [/quote]
引用 8 楼 yenange 的回复:
[quote=引用 7 楼 berg369 的回复:] 如果这个表设计成字典表形式,每个属性一条记录,那么值都只能用一种类型存放,需要转换,而且存取多条记录不如存取一条简单。所以感觉还是一条记录的表存放全局变量更好,这些变量中,有的变量甚至是一个大的配置文件(长度超过10000字符),保存着具体的配置项,如果用字典表,需要都用clob来存放值才能满足。 另外,日常维护,只对这些属性进行修改而不会增删,只有版本升级时,才会添加或删除列(对应的程序也同时修改),这些属性是相对固定的,改为多行存储,那么这些属性就成为一些可变的数据值,反而不够稳定。
你想得太复杂了, 程序启动时时获取一次值即可, 启动后再次取值不过时取这些在缓存里面的值, 效率并不低的。 反复从数据库里取值, 再快也有损耗。 [/quote] 当然性能不是问题,我只是觉得这种用法很奇怪,用一条不需要主键的记录来保存变量,反而比用字典表形式更稳定,当系统迁移或者部署新系统时,实施人员不用关心字典表中有哪些key,我想我了解一下是否有更好的方案,或者说虽然无主键单行记录的表很奇怪,但确实很好用?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧