gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:49 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com