加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – 大量列的数据库模式设计

发布时间:2020-12-12 13:14:07 所属栏目:百科 来源:网络整理
导读:我有一个用例,我需要为参考数据建模,例如不同口味的冰淇淋.说我有50种口味的冰淇淋: – 20个属性,例如所有口味都可以分享冰冻的温度 每种口味的冰淇淋都有20-30个属性,不会与其他口味共享,例如: : – 草莓冰淇淋可能会跟踪酸味,水果百分比等. 巧克力冰淇
我有一个用例,我需要为参考数据建模,例如不同口味的冰淇淋.说我有50种口味的冰淇淋: –

> 20个属性,例如所有口味都可以分享冰冻的温度
>每种口味的冰淇淋都有20-30个属性,不会与其他口味共享,例如: : –

>草莓冰淇淋可能会跟踪酸味,水果百分比等.
>巧克力冰淇淋可能会追踪苦味,可可等级.

我如何在数据库模型中整齐地建模这些数据,纯粹从存储/检索的角度来看?

我能想到的选择: –

>每种口味一张桌子.这将需要50个表,每个表将有20个彼此重叠的列,以及另外20-30个属性,这些属性将是独特的.

>优点:很好地模拟每种口味的数据
>缺点:列重叠和需要大量表

>一张适合各种口味的餐桌.这只需要1个表,但需要1000列,其中大部分都是空的.

>优点:一般来说,很好地模拟冰淇淋的数据
>缺点:大量的列和大量的“浪费”空间

>一个适用于所有口味的键值表,包含flavor Id,属性名称和属性值.

>优点:最简单的创建和插入数据
>缺点:难以提取,不是真正的数据模型本身,难以形成属性约束,或与其他属性相关的属性

解决方法

我有一个包含所有公共属性的表,然后是另一个用于非共享属性的表.例如:

CREATE TABLE ICE_CREAM_FLAVOR
  (FLAVOR          VARCHAR2(100) PRIMARY KEY,FREEZING_TEMP   NUMBER,CREAMINESS      NUMBER,ETC             VARCHAR2(25),BLAH            NUMBER);

CREATE TABLE ICE_CREAM_FLAVOR_ATTRIBUTE
  (ID_ICF_ATTRIBUTE  NUMBER,-- should be populated by an insert trigger
   FLAVOR            VARCHAR2(100)
     NOT NULL
     REFERENCES ICE_CREAM_FLAVOR(FLAVOR),ATTRIBUTE_NAME    VARCHAR2(25),ATTRIBUTE_VALUE   VARCHAR2(100));

你的旅费可能会改变.

分享和享受.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读