用户可自定义表中众所周知行的最佳方法?

时间:2010-12-14 17:03:07

标签: core-data database-design

我为最终用户定制的数据库应用程序编写。

通常,这意味着 - 暂时搁置数据库 - 我的一些名义实体类型具有无限的Universe或域。

取名字类型。您可以拥有名字,姓氏,已婚姓名,法定姓名,称呼名称等。我不会在这个宇宙上设置上限。

但我确实需要找到并使用某些众所周知的名称类型。让我们说显示名称和排序名称,只是为了保持简单。

我还希望能够查询所有名称类型(即整个Universe)并返回我的知名名称类型。

在数据库中有几种策略可以实现:

  1. 有一个带有id列和代码列的name_type表。小于一定量的ID值被“保留”供系统使用;高于此值的ID值被视为用户类型。
  2. 在id / code对中添加一列,它是boolean或int类型的一种表示,指示这是什么类型的行(例如用户定义的或系统的)。同样的事,真的;只是使用另一列来明确地分解信息而不是在id中重载它。
  3. 有两个表可能有一个命名约定:name_type和name_type_system。可以理解或强制执行name_type_system对用户的禁止; name_type是他们的域名。查询在这些表和应用程序中执行UNION只是“知道”从不更新系统表。
  4. 人们使用什么策略?任何战争故事?选择其中一个的任何特殊原因?我没有看到巨大的陷阱?

    最佳,
    莱尔德

1 个答案:

答案 0 :(得分:1)

在你的三个想法中,第一个通常被称为幻数,http://en.wikipedia.org/wiki/Magic_number_(programming),并且是一件坏事,因为任何不“知道”它的代码都会犯错误。另外,随着时间的推移你最终意识到,“哎呀,我需要将最小值推高,需要重新排序10,000个现有行。”头疼,头痛。

之后,其他两个中的任何一个都有效。但第三个允许您使用数据库服务器拒绝对最终用户使用的帐户进行插入/更新/删除访问,从而简化代码。

在选项2和3之间做出决定的方法是问,它们真的是两个独立的东西吗?如果是,他们将倾向于具有不同的安全性,对它们执行不同的操作,一个通过升级修改,另一个不修改等等。如果它们实际上是两个不同的东西,则它们分为两个表。如果它们是一种几乎总是被视为同一种东西的两种口味,它们会进入一个带有“类型”标志的表,选项2。