具有动态行和列的数据库表

时间:2018-05-01 12:29:00

标签: java android sql

我打算创建一个通过EditText获取String人名的应用程序,然后将它们保存在数据库中有一列的table1中。 还有另一个table2,其中一些列等于table1中的人名数,行是人的分数(整数)。 我有:“MainActivity”显示table2,“AddPersonActivity”显示table1并允许用户添加人员,“AddScoreActivity”允许用户为每个人插入分数,“dbHelper”类管理我的数据库。 我需要AddScoreActivity来为每个人动态显示EditText,并使用dbHelper将它们放在table2中的正确位置。 由于我是Android的新手,任何机构都可以给我一个辅助或示例,以便用户可以插入他想要的人。

1 个答案:

答案 0 :(得分:0)

在典型的关系数据库中,您无法动态添加列。

话虽如此,一些数据库(例如PostgreSQL)实现了array数据类型。如果列是数组类型,则它可以包含多个值。您甚至可以拥有多维数组。例如,这是一个典型案例:

create table person (
  id int primary key not null,
  properties text[]
);

此表中的每一行都包含一个id,以及存储在数组中的零个或多个属性值。

通常情况下,如果你有这种要求,你可以通过将表分成两个来使用更高的正常形式,如下所示:

create table person (
  id int primary key not null
);

create table person_property (
  value text,
  person_id int not null,
  constraint fk_prop_person foreign key (person_id) 
    references person (id)
);

这种方式更容易管理数据。在第二个结构中:

  • 当元素用完时你不需要实例化一个全新的数组,你需要再添加一个。
  • SQL查询更容易编写。
  • 通常,与使用数组的解决方案相比,插入/更新/删除属性非常简单。