gpt4 book ai didi

database-design - 数据库设计查找表

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

我目前正在尝试改进旧数据库的设计,我有以下情况

目前我有一个表 SalesLead,我们在其中存储了 LeadSource。

Create Table SalesLead(
....
LeadSource varchar(20)
....
)

潜在客户来源存储在表格中很有帮助。
Create Table LeadSource (
LeadSourceId int, /*the PK*/
LeadSource varchar(20)
)

所以我只想创建一个从一个到另一个的外键并删除非规范化列。

所有标准的东西,我希望。

这是我的问题。我似乎无法摆脱而不是写作的问题
 SELECT * FROM SalesLead Where LeadSource = 'foo'

这是完全明确的,我现在必须写
SELECT * FROM SalesLead where FK_LeadSourceID = 1

或者
SELECT * FROM SalesLead 
INNER JOIN LeadSource ON SalesLead.FK_LeadSourceID = LeadSource.LeadSourceId
where LeadSource.LeadSource = "foo"

如果我们更改 LeadSource 字段的内容,就会中断。

在我的应用程序中,当我想更改 SalesLead 的 LeadSource 的值时,我不想从 1 更新到 2(例如),因为我不想让开发人员必须记住这些 魔数(Magic Number) . id 是任意的,应该保持这样。

如何在我的应用程序代码中删除或否定对它们的依赖?

编辑 我的解决方案必须支持的语言
  • .NET 2.0 + 3(对于它的值(value) asp.net、vb.net 和 c#)
  • vba(访问)
  • 数据库 (MSSQL 2000)

  • 编辑 2.0 连接很好,只是 'foo' 可能会根据请求更改为 'foobar',我不想拖拉查询。

    最佳答案

    如果您想对表进行反规范化,只需将 LeadSource (Varchar) 列添加到 SalesLead 表,而不是使用 FK 或 ID。

    另一方面,如果您的语言支持 ENUM 结构,则“魔数(Magic Number)”应该安全地存储在枚举中,因此您可以:

    SELECT * FROM SALESLEAD WHERE LeadSouce = (int) EnmLeadSource.Foo; //pseudocode

    你的代码会有一个
    public enum EnmLeadSource 
    {
    Foo = 1,
    Bar = 2
    }

    如果这给您带来的麻烦比它所修复的更麻烦,则可以删除一些过度的规范化。但是,请记住,如果您使用 VARCHAR 字段(与魔数(Magic Number)相反),您必须保持一致性,如果您需要多种语言或文化,以后可能很难进行本地化。

    标准化之后的最佳方法似乎是使用 Enum 结构。它使代码保持干净,您始终可以在方法和函数之间传递枚举。 (我在这里假设 .NET 但也使用其他语言)

    更新 :由于您使用的是 .NET,因此如果您通过代码构建查询,则 DB 后端“无关紧要”。想象一下这个函数:
    public void GiveMeSalesLeadGiven( EnmLeadSource thisLeadSource )
    {
    // Construct your string using the value of thisLeadSource
    }

    在表中,您将有一个 LeadSource (INT) 列。但它有 1,2 或 N 的事实对您来说无关紧要。如果您稍后需要将 foo 更改为 foobar,则可能意味着:

    1)所有的“数字1”必须是数字“2”。你必须更新表。
    2) 或者您现在需要 Foo 为 2 号和 Bar 号 1。您只需更改 Enum(但要确保表值保持一致)。

    如果使用得当,Enum 是一个非常有用的结构。

    希望这可以帮助。

    关于database-design - 数据库设计查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/81533/

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