如何在 SQL 数据库中表示非 SQL 自定义模式结构

Posted

技术标签:

【中文标题】如何在 SQL 数据库中表示非 SQL 自定义模式结构【英文标题】:How to represent a non SQL custom schema structure in a SQL database 【发布时间】:2021-08-17 00:37:03 【问题描述】:

我有一个有趣的问题。我有一个关系数据库,我可以使用自定义脚本来创建表。它是伪 SQL,不使用标准创建语法。而是相当有限。我想要做的是将我的模式存储在 mysql 数据库中。

在我的自定义关系数据库中,我有一个名为:

Person 带字段

id as NUMBER 不可为空 PK name as TEXT (64) 字符数上限 year of birthDATE

所以为了生成创建脚本,我想到了使用 MySQL 数据库来存储模式。例如

我有一个名为custom_tableidname 的MySQL 表

例如1, Person 将是其中的第一条记录

我有另一个名为 custom_fields 的 MySQL 表,其内容如下:

field_id as int, not null, pk table_name_id,custom_table 的外键 field_name 为 varchar(255) field_type 为 varchar(255) is_primary_key as tinyint(1) is_nullable as tinyint(1)

数据集如下所示:

field_id table_name_id field_name field_type is_primary_key is_nullable
1 1 id NUMBER 1 0
2 1 name TEXT 0 1
3 1 year DATE 0 1

我坚持的部分是我如何/在哪里存储TEXT 字段的长度。我还有其他字段类型,例如十进制,它们也接受其他参数或默认值。

我在想可能有一个名为field_datefield_numberfield_text 的表,它将通过外键关系与custom_fields 表相关,但我不确定如何强制执行每个@ 987654346@ 在任何其他表中最多只能存在一次。任何见解将不胜感激或研究方向。我面临的挑战是,我无法在堆栈或其他与此类相关的站点中找到任何内容。

【问题讨论】:

我可以退一步问一下为什么你要创建这样的结构吗?你这样做是为了解决什么问题? 嘿,谢谢。我使用的这个软件有一个关系数据库。我有近 100 多个表,很难从 GUI 手动创建、更新等。该软件支持通过javascript创建和修改这些表(但它不是SQL),而是我传入字段名称、类型和其他参数。我想将我的模式存储在某处,然后动态生成这些表创建脚本。我的架构存储的地方需要是可维护的。我的想法是数据库表可以存储这个模式。 这能回答你的问题吗? How can you represent inheritance in a database? 【参考方案1】:

是的,数据库表可以并且确实存储架构。它被称为“catalog”。每个 SQL 数据库都应该有一个,它由每个CREATE TABLE 等维护。您可以像任何其他表一样查询它。

如果您的(相当神秘的)“伪 SQL”DBMS 不这样做,请获取适当的 DBMS。不要试图重新发明***,因为试图保持实际模式的“影子”会导致异常。

【讨论】:

以上是关于如何在 SQL 数据库中表示非 SQL 自定义模式结构的主要内容,如果未能解决你的问题,请参考以下文章

如何对sqlserver2005数据库中表字段进行加密,解密?

Spark-SQL:如何将 TSV 或 CSV 文件读入数据框并应用自定义模式?

在ASP中SQL语句中表名或列名为啥要加中括号

如何计算 Spark SQL(Databricks)中表中的列数?

SQL中表的类型

更改Sql server中表列使用的用户定义函数体