【发布时间】:2015-07-14 23:17:23
【问题描述】:
我正在设计一个 SQL 表结构为:
CREATE TABLE InCollection (
author NVARCHAR(200) DEFAULT NULL,
title TEXT,
year INT DEFAULT '0',
booktitle TEXT )
现在“作者”列可能有一个值或多个标签
<author></author>
或
<author></author><author></author><author></author>
那么如何在表结构中定义该列,以便在找到多个值时可以在“作者”中插入单个值或多个值。
【问题讨论】:
-
你的意思是找到多个值时如何插入多行?
-
您的设计不适合 RDBMS。您还需要两张表来表达您要查找的内容。多作者的书籍是 RDBMS 设计的经典示例,因此您可以找到许多专门讨论此案例的教程。这是一个例子:link.
-
数据类型
TEXT已弃用,将从 SQL Server 的未来版本中删除,您应该改用VARCHAR(MAX)。在单个列中存储多个值从来都不是一个好主意,也永远不会。你应该给你的书表一个主键,创建一个新表来存储作者并使用外键链接回你的书。虽然您需要执行 JOIN 来检索您的作者,但它比使用 XML 或任何其他分隔字符串更易于搜索。 -
有时,有一个数据库模型指定一个具有多个值的单个字段只是表明设计不好。考虑重构您的数据规范。执行此操作的常用方法是创建一个新表,该表与最初包含多个值的表具有外键关系。一些 RDBMS 系统支持字段的数组值(SQL 规范的一部分,但并非普遍支持)。否则,您只能将字符串解析为数组或其他类似方法......这可能会变得丑陋。
标签: sql database-design definition create-table