处理MySQL参考书目中页码的最佳方法?

问题描述 投票:0回答:1

我正在尝试制定具有三个基本实体的参考书目数据库的结构:

text
(散文、文章等)、
publication
(包含这些文本的书籍、期刊等)和
 maker
(作者、编辑等)。

页码被证明是其中最棘手的部分之一。由于英文数字范围的格式化规则很复杂,因此我想让软件进行格式化,并让用户只需输入单独的页码。最初我将这些作为

text
表中的列:

first_page SMALLINT,
last_page SMALLINT

但是对于像这篇从第 135 页跳到第 206 页的杂志文章来说,这不起作用:

  • 林根,乔纳森。 “无线进化。” 大都会,2003 年 6 月,130–35, 206–7。

此外,报纸页码通常是字母数字,例如“C9–C10”、“1E、7E”或“WC13”。

所以看来我需要一个额外的表,

page_range
,以及数据类型更改:

range_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
text_id INT FOREIGN KEY REFERENCES text(text_id),
first_page VARCHAR,
last_page VARCHAR,
range_ordinal TINYINT

我的问题:这真的是最好的方法吗?为本质上只是

text
的一个属性创建一个完整的表感觉有点过分。我走在正确的道路上吗,还是有更好的方法?

mysql database database-design
1个回答
0
投票

如果您只想要一个具有一系列页面范围的字符串,那么您可以使用

VARCHAR
TEXT
。但请将此字符串视为逐字。也就是说,您可以将完整列表存储或获取完整列表作为原子字符串。您不使用 SQL 表达式来搜索、排序或编辑列表。

但是,如果您想使用 SQL 表达式处理各个页面范围,例如计算有多少个范围,或编辑页面范围列表,或搜索特定页面范围,则创建第二个表并将它们存储在多个页面中该表的行。

© www.soinside.com 2019 - 2024. All rights reserved.