任意用户提交的数据库“对象”的数据库设计

时间:2015-06-10 02:21:01

标签: python sql django postgresql

我正在为需要存储通用“对象”和相关信息的用户开发数据库软件。 (使用Web界面来抽象SQL)

首先,在这种情况下,我所说的“对象”是一个“事物”,可以由任意数量的输入字段定义,例如:

“客户”对象可能由

定义
  • 名称
  • 电话号码
  • 电子邮件
  • 公司
  • 等...

这些对象由用户设计。因此,我需要一种在SQL中定义任意对象的方法。

到目前为止,我提出的解决方案是这样的:

    CREATE TABLE object_name
    (
        p_key SERIAL PRIMARY KEY,
        name varchar UNIQUE NOT NULL
    );

    CREATE TABLE field_type
    (
        p_key SERIAL PRIMARY KEY,
        type varchar UNIQUE NOT NULL
    );

    CREATE TABLE field_name
    (
        p_key SERIAL PRIMARY KEY,
        name varchar UNIQUE NOT NULL
    );

    CREATE TABLE object
    (
        object_name_id integer REFERENCES object_name (p_key),
        field_type_id integer REFERENCES field_type (p_key),
        field_name_id integer REFERENCES field_name (p_key),
        PRIMARY KEY (object_name_id, field_type_id, field_name_id)
    );

基本思想是使用联结表来定义用于定义对象的字段数量/类型。 (这只是一个非常基本的例子)

我遇到了一些与此解决方案有关的问题。

  1. 用户希望对象的字段引用另一个对象。例如,在我之前展示的“客户”示例中,“公司”字段可能是“公司”对象列表中的选择。这会导致一个问题,因为可以想象“公司”还有一个引用“客户”字段的情况。意思是,会有循环引用......首先会创建哪个对象?

  2. 使用SQL来定义对象甚至是合理的方法吗?或者定义一个对象更适合XML文件?

  3. 假设可以任意定义对象,那么存储任意对象实例的最佳方法是什么?

  4. 任何面包屑都会有所帮助。旁注:我正在考虑使用Django和postgresql作为框架。

    谢谢。

0 个答案:

没有答案