MySQL 数据库,带有用户创建的带有自定义列号的表

标签 mysql database database-design

我有一个人表,我希望用户能够与他们创建定制的多对多信息关系。教育、住所、就业、语言等。这些可能需要不同数量的列。例如。

Person_languages(person_fk,language_fk)
Person_Educations(person,institution,degree,field,start,end)

我想到了这样的事情。 (不正确的sql)

create Tables(
             table_id PRIMARY_KEY,
             table_name_fk FOREIGN_KEY(Table_name),
             person_fk FOREIGN_KEY(Person),
             table_description TEXT
            )

包含所有自定义表名称和描述的表

create Table_columns(
                     column_id PRIMARY_KEY,
                     table_fk FOREIGN_KEY(Tables),
                     column_name_fk FOREIGN_KEY(Columns),
                     rank_column INT,
                    )

包含每个自定义表格中的列及其显示顺序的表格。

create Table_rows(
                  row_id PRIMARY_KEY,
                  table_fk FOREIGN_KEY(Tables),
                  row_nr INT,
                 )

包含每个自定义表格行的表格。

create Table_cells(
                   cell_id PRIMARY_KEY,
                   table_fk FOREIGN_KEY(Tables),
                   row_fk FOREIGN_KEY(Table_rows),
                   column_fk FOREIGN_KEY(Table_columns),
                   cell_content_type_fk FOREIGN_KEY(Content_types),
                   cell_object_id INT,
                  )

包含单元格信息的表格。

如果任何自定义表格开始被大多数人使用并且变得很大,我们的想法是也许然后将它提取到一个单独的硬编码多对多表格中,只用于该表格。

这是一个愚蠢的想法吗?有一个更好的方法吗?

最佳答案

我强烈反对这样的设计 - 你正在走向一个极其分散且难以阅读的设计。

IIUC 你的基本问题是,你有一个人的一组通用(通用)属性,可以通过其他(非通用)属性进行扩展。

我会通过在 person 表中使用通用属性来解决这个问题,并创建另外两个表:property_types,它将属性名称转换为 INT 主键和person_properties,结合了人物PK、属性PK和值(value)。

如果您将此表的 PK 设置为 (person,property),您将获得该人的最佳索引位置,这使得请求一个人的所有属性成为非常快速的查询。

关于MySQL 数据库,带有用户创建的带有自定义列号的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13969525/

相关文章:

php - 如何更改 WAMP 中 phpMyAdmin 中显示的语言?

mysql - 具有单独表和 LEFT JOIN 的继承 : how to know which subclass the record belongs to

mysql - 如何根据mysql中的聚合列添加排名列?

sql - 在数据库列中生成唯一的随机整数

sql - 我将如何为读写操作实现单独的数据库?

java - 在 Java 中通过代理连接 MySQL

php - mysql 查询仅显示 1 个结果

PHP - 使用登录系统保护仅限成员(member)的页面

java - SOA中如何解耦数据库实体依赖?

sql - SQL Server 中数据库范围的唯一但简单的标识符