这个问题是基于我对问题Getting weird issue with TO_NUMBER function in Oracle的回答而提出的
由于每个人都建议将数值存储在VARCHAR2列中不是一个好的做法(我完全同意),我想知道我们团队做出的一个基本设计选择,以及是否有更好的设计方法。
问题陈述:我们有许多表,我们想要给出一定数量的自定义字段。所需自定义字段的数量是已知的,但用户可以使用映射到列的属性类型
例如,我在下面写下一个假设的场景
假设您有一台笔记本电脑,它为每个笔记本电脑记录存储了50个属性值。每台笔记本电脑的属性都是由创建笔记本电脑的管理员创建的。
用户创建了一个笔记本电脑产品,假设lap1具有字符串、字符串、数字、数字、字符串等属性
第二个用户使用字符串、数字、字符串、字符串和数字属性创建了laptop lap2
目前,我们设计中的数据被持久化如下
Laptop Table
Id Name field1 field2 field3 field4 field5
1 lap1 lappy lappy 12 13 lappy
2 lap2 lappy2 13 lappy2 lapp2 12这个例子模拟了我们的需求和设计
现在,如果有人在field2上查找lap2表的记录进行比较,我们需要应用TO_NUMBER。
select * from laptop
where name='lap2'
and TO_NUMBER(field2) < 15在某些情况下,当查询计划决定首先应用TO_NUMBER而不是其他筛选器时,to_number会失败。
问题
这是一个有效的设计吗?
解决此问题的其他替代方法是什么?
我们的一位队友建议在这种情况下动态创建表格。这是个好主意吗?
流行的ORM工具如何提供自定义字段或flex字段处理?
我希望我能够理解这个问题。
很抱歉发这么长的短信..
这导致我们在查询时使用TO_NUMBER
发布于 2010-05-28 03:11:38
如果所有列类型都是在创建表的时候决定的,那么动态生成表对我来说听起来很不错。
但是,如果两个用户使用具有不同字段的同一个表,则可以只为自定义字段创建新表,并将它们连接到主表。这更像是一种面向对象的方法。
https://stackoverflow.com/questions/2924027
复制相似问题