问题标签 [surrogate-key]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
data-warehouse - 创建维度代理键
我了解在数据仓库维度中使用代理键有充分的理由。不过,我不明白如何将它们链接到我的事实表的外键。在事实表中,我只有自然键,在 ETL 期间提取。原始数据库表中不存在代理键。对此有什么建议吗?谢谢
sql - 查找表——自然键或代理键作为主键?
我有一张记录许可证使用情况的表格。每个许可证使用都需要与用户和主机相关联。表定义如下所示。
我想规范化这个表,以便将重复的用户/主机值移动到这样的新表中。
对于user_host表,我应该选择什么样的主键 - 自然或代理?我可以想到以下控制因素。
- 如果主键是自然的,即用户名和主机名的组合,则父表per_user_fact不需要额外的连接来查找用户名和主机名。
- 如果主键是自然的,则会浪费存储,因为用户名和主机名值将在两个表中重复。
- 如果主键是代理项,则父表将需要额外的连接来获取用户名和主机名的值。
- 如果主键是代理,对 user_host 表的索引会更快。
请指教。
database - 具有复合键的有序树的表设计
考虑数据库规范化规则时首选哪种表设计:
考虑描述有序树的节点表的以下设计。密钥是复合密钥。
- ck:复合键
- parent:父节点
- next:下一个节点,其中
next.parent = parent.
(这定义了一个前向链表) - sk:代理键
设计一:
设计二:
设计3:
第一个设计有 6 列。第二种设计增加了一个替代键,有 7 个列。第三种设计有 5 个列,它使用代理项来保存一列。
是否有任何规范化规则(或其他数据库设计规则)更喜欢一种设计而不是其他设计?
更新
替代设计:子类型节点表、isParent 标志、嵌套集。这些设计具有更大的读/写复杂性。
设计4:
此设计将表拆分为 3 个表。父表和下一个表包含来自节点表的键的互斥子集。它
2+4=6
为每个节点使用列。node(ck_x, ck_y)
parent(ck_x, ck_y, parent_ck_x, parent_ck_y)
next(ck_x, ck_y, next_ck_x, next_ck_y)
设计5:
此设计使用 isParent 标志来指示下一项是父项。它使用
4+1=5
列,1 列只是一点点。这比设计 3 中使用的 5 列空间小)node(ck_x, ck_y, next_ck_x, next_ck_y, isParent)
设计6:
此设计使用嵌套集来创建有序树。复合键不再用于定义父级或子级的顺序。它使用
2+2=4
列。但是下限列和上限列都应该使用sizeof(ck_x)+sizeof(ck_y)
等于设计 1 中使用的 6 列的空间。node(ck_x, ck_y, lowerBound, upperBound)
更新
设计7:
这使用了节点位置的索引。
node(ck_x, ck_y, parent_ck_x, parent_ck_y, index)
笔记
与插入和更新相比,使用前一个节点 iso 下一个节点减少了对单个插入的创建和添加。
规范化与列或表的数量无关。
sql - 数据库设计 - 连接表的子项关键选择
我搜索了以下问题的答案,但得到的答案主要与是否使用代理项有关,而不是关于是否在连接表的子项上使用复合键。
我有一张桌子attendees
和一张桌子events
。
连接表是event_attendees
,包含两个外键attendee_id
和event_id
,还有一个代理主键id
现在假设参加活动的参与者可以拥有schedule_items
.
我通常会简单地使用表event_attendee_id
中schedule_item_id
的列event_attendee_schedule_items
。
使用以下复合外键设置有哪些缺点(如果有的话)?
attendee_id
, event_id
, schedule_item_id
(复合键而不是event_attendees
表的直接链接)?
apache-pig - 在 pig 中创建自定义代理键
有没有办法在 Pig 中创建自定义代理键?
例如:我们有如下数据
对于这些数据,我们需要创建如下代理键,结果应如下所示。
而不是创建随机唯一键?
提前致谢!!。
caching - Nginx 缓存:基于标签的缓存清除,如 Varnish Hashtwo
我们即将为我们的站点设置缓存和反向代理,我们正在决定是使用 Varnish 还是 Nginx。我们有复杂的缓存清除要求,我们实际上需要代理键(或基于标签的)缓存失效。
Varnish 为Hashtwo提供了这个功能。Nginx 是否以任何形式提供此功能?
data-warehouse - 为什么需要代理键?
我正在阅读有关 DW 建模的内容,并开始想知道为什么要使用代理键?
我知道有时业务键不是整数,这会使生活(以及连接和索引)变得更加困难。但是,我不明白为什么要通过添加额外的列来管理唯一标识符来解决 DW 或 RDBMS 的限制?
这种功能对 DW/RDBMS 用户是透明的,并且条目会自动从系统获取内部标识符,这不是更合适吗?例如,创建整行或其子集的 SHA-1 摘要(可以以某种文本格式表示的那些字段)。
database - 识别代理键
我正在模拟一家航空公司。我有一张“乘客”表
如果我是正确的,我会说乘客确认号和航班号是代理键。我想知道的是,在这种情况下,诸如 seatNum 之类的属性也将是 asurrogate key
或将被视为 a natural key
。
sql - 有没有办法根据 DB2 中的外键自动增加列?
假设我有一个地址表,其中包含制造公司不同设施的地址。外键让我知道地址属于哪个公司,但我需要一个代理 ID 来区分每个设施。此 id 应根据外键值自动递增。注意:我只需要简单的整数值作为键。
例如:
我的表有以下列,ORGANIZATION_ID 是外键。FACILITY_ID 是依赖于外键的第二个代理键。
我希望设施 ID 根据组织 ID 从 1 自动增加。IE
当我为新组织插入数据时,设施应从 1 开始
下次我为同一组织插入数据时,我的设施 ID 应相应增加 -
有什么方法可以在 DB2 中实现这一点?我目前使用的是 DB2 V 10.5.6