如何在 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 birth
为 DATE
所以为了生成创建脚本,我想到了使用 MySQL 数据库来存储模式。例如
我有一个名为custom_table
和id
和name
的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_date
、field_number
、field_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 文件读入数据框并应用自定义模式?