gpt4 book ai didi

sql - 为实现理智或性能而进行非规范化处理?

转载 作者:行者123 更新时间:2023-12-04 04:48:38 25 4
gpt4 key购买 nike

我开始了一个新项目,他们有一个非常规范的数据库。可以作为查找内容的所有内容都存储为查找表的外键。这是标准化的并且很好,但是我最终对最简单的查询进行了5个表联接。

    from va in VehicleActions
join vat in VehicleActionTypes on va.VehicleActionTypeId equals vat.VehicleActionTypeId
join ai in ActivityInvolvements on va.VehicleActionId equals ai.VehicleActionId
join a in Agencies on va.AgencyId equals a.AgencyId
join vd in VehicleDescriptions on ai.VehicleDescriptionId equals vd.VehicleDescriptionId
join s in States on vd.LicensePlateStateId equals s.StateId
where va.CreatedDate > DateTime.Now.AddHours(-DateTime.Now.Hour)
select new {va.VehicleActionId,a.AgencyCode,vat.Description,vat.Code,
vd.LicensePlateNumber,LPNState = s.Code,va.LatestDateTime,va.CreatedDate}

我建议我们对某些内容进行标准化处理。像州代码一样我没有看到状态码在我的一生中发生变化。与三字母代理商代码相似的故事。这些是由代理机构分发的,永远不会改变。

当我向DBA提出状态代码问题时,这5个表已联接。我得到“我们被规范化”和“联接很快”的响应。

是否有令人信服的论点去规范化?如果没有其他原因,我会为了理智而这样做。

T-SQL中的相同查询:
    SELECT VehicleAction.VehicleActionID
, Agency.AgencyCode AS ActionAgency
, VehicleActionType.Description
, VehicleDescription.LicensePlateNumber
, State.Code AS LPNState
, VehicleAction.LatestDateTime AS ActionLatestDateTime
, VehicleAction.CreatedDate
FROM VehicleAction INNER JOIN
VehicleActionType ON VehicleAction.VehicleActionTypeId = VehicleActionType.VehicleActionTypeId INNER JOIN
ActivityInvolvement ON VehicleAction.VehicleActionId = ActivityInvolvement.VehicleActionId INNER JOIN
Agency ON VehicleAction.AgencyId = Agency.AgencyId INNER JOIN
VehicleDescription ON ActivityInvolvement.VehicleDescriptionId = VehicleDescription.VehicleDescriptionId INNER JOIN
State ON VehicleDescription.LicensePlateStateId = State.StateId
Where VehicleAction.CreatedDate >= floor(cast(getdate() as float))

最佳答案

我不知道我是否要称呼您要进行非规范化-它看起来更像是您只想用自然外键(状态缩写,代理代码)替换人工外键(StateId,AgencyId)。使用varchar字段而不是整数字段会降低连接/查询的性能,但是(a)如果您大部分时间甚至不需要连接表,因为无论如何您都希望使用自然FK,那么这没什么大不了,并且( b)您的数据库需要足够大/要承受高负载才能使其引人注目。

但是djna是正确的,因为在进行此类更改之前,您需要全面了解当前和将来的需求。您确定三个字母机构的代码即使在五年后也不会改变吗?真的,真的可以吗?

关于sql - 为实现理智或性能而进行非规范化处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1575189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com