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

Python “任意用户提交数据库的数据库设计”;“对象”;,python,sql,django,postgresql,Python,Sql,Django,Postgresql,我正在为一个需要存储通用“对象”和相关信息的用户开发一个数据库软件。(使用web界面,以抽象SQL) 首先,在这种情况下,我所说的“对象”是指可以由任意数量的输入字段定义的“事物”,例如: “Customer”对象可以由 名字 电话号码 电子邮件 公司 等等 这些对象将由用户设计。因此,我需要一种在SQL中定义任意对象的方法 到目前为止,我提出的解决方案大致如下: CREATE TABLE object_name ( p_key SERIAL PRIMARY

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

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

“Customer”对象可以由

  • 名字
  • 电话号码
  • 电子邮件
  • 公司
  • 等等
这些对象将由用户设计。因此,我需要一种在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)
    );
基本思想是使用连接表定义用于定义对象的字段的数量/类型。(这只是一个非常基本的例子)

我在使用此解决方案时遇到了一些问题

  • 用户希望对象的字段引用另一个对象。例如,在我前面展示的“Customer”示例中,“Company”字段可能是从“Company”对象列表中选择的。这会导致一个问题,因为可以想象“公司”也会有一个引用“客户”的字段。也就是说,会有循环引用。。。首先创建哪个对象

  • 使用SQL定义对象是一种合理的方法吗?或者,定义对象是否更适合XML文件

  • 假设对象可以任意定义,那么存储任意对象实例的最佳方式是什么

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


    谢谢。

    您想要多复杂?如果您想让“用户”创建任意复杂度的关系模型,那么他们应该知道关系模型是如何工作的。一旦他们知道了这一点,他们就可以直接编写SQL DDL了。我还不能完全确定其复杂性,但是我的假设是,定义“对象”的“用户”将熟悉一些关系概念,而不是SQL。仅仅创建对象实例的“用户”类型对于后台进程来说更加幼稚,因此他们都需要web界面。不过,我会考虑更多的复杂性。听起来你真的在找NosqlThank@John,我现在正在调查。