【问题标题】:Questions for making a MySQL table from a DTD file从 DTD 文件制作 MySQL 表的问题
【发布时间】:2011-07-31 12:17:36
【问题描述】:

我有一个 dtd 文件,它描述了我的列应该有哪些列。

问题是,它没有提供关于我应该为列使用什么数据类型的信息,即是 INT、Varchar 还是 Text,也没有关于列的最大长度的信息。大多数地方都写着#PCDATA,我相信这只是意味着混合数据。

有没有办法让我找出我应该使用什么数据类型和最大长度,或者我应该简单地制作一个充满Varchar (255)s 的表格?

【问题讨论】:

    标签: mysql xml database-design dtd pcdata


    【解决方案1】:

    SGML 以缺乏类型系统而著称,因此没有机械化的方法来推断任何类型元素的正确类型。请注意,#PCDATA 不是指“混合数据”,而是“已解析的字符数据”——内容为 #PCDATA 的元素不能包含任何其他元素,但它可以包含实体引用(在 SGML 中它是主题包含/排除异常,但 XML 中不存在这些异常)。 “混合内容”类似于(element1 | #PCDATA),它更难转化为数据库架构。

    最好的办法是从元素类型名称或 DTD 中有用的 cmets 推断内容类型,和/或检查一系列文档以观察它们的使用模式。

    【讨论】:

    • 我可以确定内容类型,但不能确定最大长度。您是否认为所有非数字字段都必须是 varchar 255s?
    • DTD 对长度没有任何限制,因此有效的文档可以包含任意数量的内容。如果确实有问题并且您无法使用 SGML 解析器对文档进行预处理,则可以使用 TEXT 列类型,它速度较慢但可以处理任意文本数据。
    • 感谢您的帮助,您能告诉我什么是 SGML 解析器,它会做什么?它会帮助我为我的 mysql 表定义架构,该表必须由该 DTD 文件后面的 xml 文件中的数据填充吗?
    • SGML 解析器或 XML 解析器将文件反序列化到内存中,因此您有时需要将数据插入到正确的位置。我不知道任何创建数据库模式的解析器,尽管它完全有可能存在(在互联网上搜索“基于 xml 的数据库”或类似的东西)。我的建议是对您的数据进行初步解析并跟踪最大元素长度以查看您遇到的问题。
    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多