如何管理数据库中的"选择列表"

Sti*_*imy 2 database

我有一个带有许多"选择列表"实体的应用程序(用于填充单选下拉选择框).需要从数据库中提取这些实体.如何在数据库中保留这些实体?我应该为每个选择列表创建一个新表吗?有更好的解决方案吗?

the*_*heo 6

在过去,我创建了一个包含列表名称和可接受值的表,然后查询它以显示列表.我还包含一个底层值,因此您可以返回列表的显示值,以及可能更加丑陋的绑定值(例如,规范化数据的小int)

CREATE TABLE PickList(
    ListName varchar(15),
    Value varchar(15),
    Display varchar(15),
    Primary Key (ListName, Display)
)
Run Code Online (Sandbox Code Playgroud)

如果要手动定义显示它们的顺序,还可以添加sortOrder字段.


Skl*_*vvz 6

这取决于各种事情:

  • 如果它们是不可变的和非关系的(想想“美国国家的名称”),则可以提出它们根本不应该在数据库中的论点:毕竟它们只是对更简单的东西进行格式化(例如分配的两个字符代码)。这有一个额外的好处,即您不需要往返数据库来获取一些永远不会改变的东西来填充组合框。

    然后,您可以在代码中使用枚举并在数据库中使用约束。在本地化显示的情况下,您需要为每种文化使用不同的格式,然后您可以使用 XML 文件或其他资源来存储文字。

  • 如果它们是相关的(想想“州 - 首都”)我不太相信任何一种方式......但最近我一直在使用 XML 文件、数据库约束和 javascript 来填充。它工作得很好,在数据库上很容易。

  • 如果它们不是只读的但很少更改(即通常无法由最终用户更改,而只能由某些编辑器或每日批处理更改),那么我仍然会考虑不将它们存储在数据库中的机会......这将取决于在特定情况下。

  • 在其他情况下,存储在数据库中是一种方式(想想 StackOverflow 的标签……它们是“查找”,但也可以由最终用户更改)——如果需要,可能会进行一些缓存。它需要一些小心锁定,但它会工作得很好。


Blo*_*ard 5

好吧,你可以这样做:

PickListContent

IdList  IdPick  Text  
1       1       Apples
1       2       Oranges
1       3       Pears
2       1       Dogs
2       2       Cats
Run Code Online (Sandbox Code Playgroud)

以及可选的..

PickList

Id    Description
1     Fruit
2     Pets
Run Code Online (Sandbox Code Playgroud)