gpt4 book ai didi

php - 对于引用表,我应该使用 ID 还是文本字段?

转载 作者:行者123 更新时间:2023-11-29 00:08:03 24 4
gpt4 key购买 nike

我有一个引用表 item_type,其中包含一个字段 id 和一个字段 name。在我的应用程序中,应根据项目的项目类型对其进行不同的处理。

在我的应用程序代码中,我的条件逻辑应该检查 id 还是 name?或者是否有其他最佳实践?

编辑:id 将是主键,但 name 仍然是唯一的;这些将是下拉列表中的选项,并将确定用户添加的项目类型。稍后,这些将决定如何处理该项目。

最佳答案

这可能是一个棘手的情况。

  1. 鉴于您有这个问题表明,您的设计没有指定您对这个特定表有哪些键。我会称之为不完整的设计,请重新访问这部分并明确指定存在于所有您的关系中的所有键;
  2. 如果两者都有,idname (嗯,name 不是我们传递的列的好命名,因为它是保留字),我假设 id是人为添加的,即此列不是描述您的数据所必需的。这就是所谓的代理键。你应该小心那些——它们不会让你免于重复!想象一个案例,您将拥有:

     id |   name
    ----+--------
    1 | type_a
    2 | type_b
    3 | type_a

    尽管您有自己的 id作为这里的主键并且它的所有值都是唯一的,你仍然有数据重复;

  3. 因此您必须在此处创建 2 个 key :主要位于 id name 上的列和 Unique柱子。现在,这本身并不是一个糟糕的情况,但请确保您拥有两个 key 。

就我个人而言,我使用以下规则:

  1. 如果表是一个包含少量(最多 10 个)值的字典,我使用:

    • 此表中只有 1 列,使其成为 varchar (或 text 而不是);
    • 将此列命名为与表相同的名称;
    • 将此列设为主键。

    这使 table 保持干净和小巧。而且我更喜欢使用专用表而不是 ENUM

  2. 如果我知道条目数量会增加我将需要在此过程中添加更多列,我将:

    • 创建一个专用的数字列,将其命名为 <table_name>_id (例如 customer_id ),并将其设为主键;
    • 在数据模型的其他地方使用此 PK;
    • 对真实数据创建唯一约束以避免数据重复(这是强制性的)。

编辑:我认为不需要使用 id作为这么小的东西的代理键。我怀疑此表中的值是否会经常更改(如果它们会这样做的话)。引入人工键的成本 — 加入此表以检查特定类型的条目将是必须的。而自然 text key 将允许您避免这种情况并使用如下查询:

SELECT * FROM item WHERE item_type='type_a';

我建议看一下这个问题:Is there a REAL performance difference between INT and VARCHAR primary keys?

最后 — 您应该了解您的设计并对其进行性能测试。这将为您提供关于什么最适合您的真正知识。

关于php - 对于引用表,我应该使用 ID 还是文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26595447/

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